前面寫了兩篇在圖片上獲取坐標的博客

在想要填充的區域進行點擊獲取坐標填充
opencv-python通過滑鼠點擊圖片獲取該點坐標,并填充區域

在選擇的區域,進行等磁區域
opencv-python通過滑鼠點擊圖片獲取該點坐標2,劃分多個區域
本期是在一張圖多個區域進行坐標資訊獲取,比如我連續點擊了5個區域 每個區域4個點,
回傳一個陣列5行4列的坐標資訊

這里一共20個坐標
然后回傳的結果

最后一行輸出了所有坐標
代碼如下:
import cv2
def zuobiao():
img = cv2.imread('./6.jpg') # 加載本地的影像
h, w = img.shape[:2]
img = cv2.resize(img, (w//2, h//2)) #對影像進行縮小便于后續選擇坐標點
a = [] # 用于存放橫坐標
b = [] # 用于存放縱坐標
c = [] #存放所有坐標
f = []
print('請按逆時針點擊4個坐標,連續重復5次:')
# 定義點擊事件
def on_EVENT_LBUTTONDOWN(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN: # 如果存在滑鼠點擊事件
xy = "%d,%d" % (x, y) # 得到坐標x,y
a.append(x*2) # 將每次的坐標存放在a陣列里面 由于原先圖片尺寸縮小一半,這里坐標點需要變回原圖片的尺寸位置
b.append(y*2) # 將每次的坐標存放在b陣列里面
cv2.circle(img, (x, y), 1, (0, 0, 255), thickness=-1) # 點擊的地方小紅圓點顯示
cv2.putText(img, xy, (x, y), cv2.FONT_HERSHEY_PLAIN, # 點擊的地方顯示坐標數字 引數1圖片,引數2添加的文字,引數3左上角坐標,引數4字體,引數5字體粗細
1.0, (0, 0, 0), thickness=1)
cv2.imshow("image", img) # 顯示圖片
cv2.namedWindow("image") # 定義圖片視窗
cv2.setMouseCallback("image", on_EVENT_LBUTTONDOWN) # 回呼函式,引數1視窗的名字,引數2滑鼠回應函式
cv2.imshow("image", img) # 顯示圖片
cv2.waitKey(0)
for i in range(0, len(a)):
print(a[i], b[i]) # 列印坐標
c.append([a[i], b[i]])
print(c)
if len(c) != 20:
print('請重新運行,只能逆時針點擊4個坐標,選擇5個區域……')
exit(-1)
elif len(c) == 20:
cv2.destroyWindow('image')#關閉該視窗
print('5次坐標輸入完畢,等待處理')
d = 0
for i in range(0,5):
print(c[i])
f.append([c[d],c[d+1],c[d + 2],c[d + 3]])
d+=4
print(f)
return f
zuobiao()
當然我們在運行的時候很可能會遇到opencv報錯的問題
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-z4706ql7\opencv\modules\highgui\src\window.cpp:1274: error: (-2:Unspecified error) The function is not implemented. Rebuild the library with Windows, GTK+ 2.x or Cocoa support. If you are on Ubuntu or Debian, install libgtk2.0-dev and pkg-config, then re-run cmake or configure script in function 'cvShowImage'
有可能是下載的版本問題,或沒安裝好
刪了重新下載即可
pip uninstall opencv-python
pip3 install opencv-contrib-python
當然報錯還有可能是路徑帶有中文或空格有時也會報錯,
還有的保存是函式的版本不同,老版本回傳的是三個引數,新版本卻只有兩個引數
比如
contours,heriachy = cv.findContours(binary,cv.RETR_EXTERNAL,cv.CHAIN_APPROX_SIMPLE)
那么本期博客就寫到這里,
記得點贊關注加收藏,多支持博主,才能有動力日更不斷!!!
有需要寫代碼的,可以私聊我,或加扣:334542894
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294802.html
標籤:其他
上一篇:C語言詳解:函式遞回專題
