microproduct/landcover_c_sar/test_tool/MarkRange.py

101 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# -*- 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'退出标记