microproduct/landcover_c_sar/test_tool/MarkRange.py

101 lines
3.0 KiB
Python
Raw Normal View History

2023-08-28 10:17:29 +00:00
# -*- coding: UTF-8 -*-
"""
@Function 标记工具
"""
import cv2
from tool.algorithm.algtools.CoordinateTransformation import *
import numpy as np
# mouse callback function
def draw_circle(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN:
param.appendPoint(x, y)
#print("{0},{1}".format(x, y))
class MarkRange:
def __init__(self,img=None,imgWidth=512,imgHeight=512):
self._PointList=[]
if img is None:
self._img = np.zeros((imgWidth, imgHeight, 3), np.uint8)
else:
self._img=img.copy()
self._imgShow=self._img.copy()
self._MarkFlag=False
def doMark(self,pointNum=-1):
cv2.namedWindow('image')
cv2.setMouseCallback('image', draw_circle,self)
while (True):
cv2.imshow('image', self._imgShow)
code=cv2.waitKey(20)
if code==115:
break
if pointNum!=-1 and pointNum==len(self._PointList):
break
if self._MarkFlag==True:
self._MarkFlag=False
self._drawPoint()
cv2.destroyAllWindows()
return self._PointList
def appendPoint(self,x,y):
self._PointList.append([x,y])
self._MarkFlag=True
def _drawPoint(self):
for p in self._PointList:
cv2.circle(self._imgShow,p,2,[0,0,255],cv2.FILLED)
def Mark():
img = np.zeros((512, 512, 3), np.uint8)
markRag=MarkRange(img,400,300)
markRag.doMark(4)
def GetlonlatFromMark(markRag,ref_tif_path):
counterSize = [2]
pointNum=10
tif = ref_tif_path
# bmp = 'polarisation_fraction.bmp'
# img = cv2.imread(bmp,1)
# if img is None:
# print("img is none")
# return
outline = []
for item in counterSize:
# markRag = MasrkRange(img)
plist = markRag.doMark(-1) # 点击s退出标记
if len(plist) > 0:
outline.append(plist)
gdal.AllRegister()
# dataset = gdal.Open(r"D:\\DATA\\雷达测试\\GaoFen3_20200528_HH_DB.tif")
dataset = gdal.Open(tif)
print('数据投影:')
print(dataset.GetProjection())
print('数据的大小(行,列):')
print('(%s %s)' % (dataset.RasterYSize, dataset.RasterXSize))
lonlatList=[]
fw = open('coords.txt', "w")
poly = 'POLYGON(('
for item in outline:
for cell in item:
projs = imagexy2geo(dataset, cell[1], cell[0])
coords = geo2lonlat(dataset,projs[0], projs[1])
coordstr="{0} {1},".format(coords[1],coords[0])
poly = poly + str(coordstr)
print(coordstr)
poly = poly[:-1]
poly +='))'
print(poly)
fw.write(poly)
fw.write('\n')
if __name__ == '__main__':
# mr = MarkRange(cv2.imread('polarisation_fraction.bmp',1))
mr = MarkRange(cv2.imread('D:\\1.tif', 1))
ref_tif_path = 'D:\\1.tif'
GetlonlatFromMark(mr,ref_tif_path) # 在图像上标记,输出图像轮廓点; 点击's'退出标记