我想找到紅色圓圈。我使用了 opencv2,簡單的 Blob 檢測器。當我在照片上應用蒙版時,找不到圓圈。它沒有錯誤訊息,只是找不到任何圈子。這就是我得到的 ->已建立的blob。我的測驗照片 -> BlobTest4.jpg。我的代碼如下。
import cv2
import numpy as np
img=cv2.imread("BlobTest4.jpg")
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
lower_red = np.array([95,0,0])
upper_red = np.array([255,90,90])
mask=cv2.inRange(rgb,lower_red,upper_red)
params = cv2.SimpleBlobDetector_Params()
params.filterByCircularity = True
params.minCircularity = 0.85
params.minThreshold = 1
params.maxThreshold = 2000
params.filterByArea = True
params.minArea = 33
params.filterByConvexity = True
params.minConvexity = 0.8
params.filterByInertia = True
params.minInertiaRatio = 0.01
blob=cv2.SimpleBlobDetector_create(params)
blob_coordinate=blob.detect(mask)
blob_coordinate_without_mask=blob.detect(img)
founded_blobs=cv2.drawKeypoints(mask,blob_coordinate,np.array([]),(0,255,0),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
founded_blobs_without_mask=cv2.drawKeypoints(img,blob_coordinate2,np.array([]),(0,255,0),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.namedWindow("mask",cv2.WINDOW_NORMAL)
cv2.namedWindow("founded_blobs_with_mask",cv2.WINDOW_NORMAL)
cv2.namedWindow("founded_blobs_without_mask",cv2.WINDOW_NORMAL)
cv2.imshow("founded_blobs_with_mask",founded_blobs)
cv2.imshow("founded_blobs_without_mask",founded_blobs_without_mask)
cv2.imshow("mask",mask)
cv2.waitKey(0)
cv2.destroyAllWindows
uj5u.com熱心網友回復:
我認為斑點檢測可以檢測到白色上的黑色。這就是為什么需要反轉面具的原因。
reversemask=255-mask
blob=cv2.SimpleBlobDetector_create(params)
blob_coordinate=blob.detect(reversemask)
這是一個作業代碼。
import cv2
import numpy as np
img=cv2.imread("BlobTest4.jpg")
rgb=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
lower_red = np.array([95,0,0])
upper_red = np.array([255,90,90])
hsvFrame = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask=cv2.inRange(rgb,lower_red,upper_red)
kernal = np.ones((5, 5), "uint8")
red_mask = cv2.dilate(mask, kernal)
params = cv2.SimpleBlobDetector_Params()
params.filterByCircularity = True
params.minCircularity = 0.85
params.minThreshold = 1
params.maxThreshold = 2000
params.filterByArea = True
params.minArea = 33
params.filterByConvexity = True
params.minConvexity = 0.8
params.filterByInertia = True
params.minInertiaRatio = 0.01
reversemask=255-mask
blob=cv2.SimpleBlobDetector_create(params)
blob_coordinate=blob.detect(reversemask)
blob_coordinate_without_mask=blob.detect(img)
print(blob_coordinate_without_mask)
print(blob_coordinate)
founded_blobs=cv2.drawKeypoints(red_mask,blob_coordinate,np.array([]),(0,255,0),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
founded_blobs_without_mask=cv2.drawKeypoints(img,blob_coordinate_without_mask,np.array([]),(0,255,0),cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.namedWindow("mask",cv2.WINDOW_NORMAL)
cv2.namedWindow("founded_blobs_with_mask",cv2.WINDOW_NORMAL)
cv2.namedWindow("founded_blobs_without_mask",cv2.WINDOW_NORMAL)
cv2.imshow("founded_blobs_with_mask",founded_blobs)
cv2.imshow("founded_blobs_without_mask",founded_blobs_without_mask)
cv2.imshow("mask",mask)
cv2.waitKey(0)
cv2.destroyAllWindows
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471833.html
