Python OpenCV获取正确的HSV值
我试图在范围内应用,以便在柠檬上找到黑色污渍。 由于某些原因,我无法找到正确的HSV值(我曾尝试使用GIMP和photoshop,但没有成功) 我在C++中找到了类似的参考文章: 到目前为止,我的代码非常简短:Python OpenCV获取正确的HSV值,python,opencv,hsv,Python,Opencv,Hsv,我试图在范围内应用,以便在柠檬上找到黑色污渍。 由于某些原因,我无法找到正确的HSV值(我曾尝试使用GIMP和photoshop,但没有成功) 我在C++中找到了类似的参考文章: 到目前为止,我的代码非常简短: image = cv2.imread("./data/lemon1big.jpg") # parse BGR to RGB image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV) lower = np.array([20,5,5],np.uint
image = cv2.imread("./data/lemon1big.jpg")
# parse BGR to RGB
image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower = np.array([20,5,5],np.uint8)
upper = np.array([68,70,68],np.uint8)
imageHsv = cv2.inRange(imageHsv, lower, upper)
imageAdaptive = cv2.adaptiveThreshold(imageHsv,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,2)
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(1,1))
imageDilate = cv2.dilate(imageAdaptive,kernel)
result, contours, hierarchy = cv2.findContours(imageDilate.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
if len(contours) != 0:
for (i, c) in enumerate(contours):
area = cv2.contourArea(c)
if (area > 700 and area < 1000):
x,y,w,h = cv2.boundingRect(c)
cv2.rectangle(result,(x,y),(x+w,y+h),(0,255,0),12)
image=cv2.imread(“./data/lemon1big.jpg”)
#将BGR解析为RGB
图像=cv2.CVT颜色(图像,cv2.COLOR\u BGR2HSV)
下限=np.数组([20,5,5],np.uint8)
上限=np.数组([68,70,68],np.uint8)
imageHsv=cv2.inRange(imageHsv,下部,上部)
imageAdaptive=cv2.adaptiveThreshold(imageHsv,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,2)
kernel=cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(1,1))
ImageDisplate=cv2.Displate(imageAdaptive,内核)
结果,等高线,层次=cv2.findContours(ImageDisplate.copy(),cv2.RETR\u列表,cv2.CHAIN\u近似值\u简单)
如果len(等高线)!=0:
对于枚举(等高线)中的(i,c):
面积=cv2。轮廓面积(c)
如果(面积大于700且面积小于1000):
x、 y,w,h=cv2.boundingRect(c)
cv2.矩形(结果,(x,y),(x+w,y+h),(0255,0),12)
这是原始的蒙面照片:
我查找的结果如下(大约12个黑色污点):
我的结果是这样的:
你的结果如何?@MarkSetchell我用一个结果编辑了我的文章(你可以忽略我在原始图像上使用圆圈的事实)你没有将图像转换为hsv颜色空间,是吗?@mika文章中的代码没有包含它。对不起,我的错。我将图像从BGR转换为HSV。HSV是强制性的吗?您可以尝试的一件事是处理实验室图像,并将灰度图像设置为Ig=(a*+b*)/2。如果光度出现问题,可以通过光度Ig=(a*+b*)/(2 x L)进行规格化。