我正在创建一个可以检测图像中绿色百分比的代码。
。
我对 OpenCV 有一点经验,但对图像处理仍然很陌生,并且需要一些有关我的代码的帮助。我应该如何更改此代码,以便它能够计算绿色而不是棕色的百分比?如果不太麻烦,有人可以解释一下这些更改如何影响代码吗?下面是我想使用的图像的链接。代码归功于@mmensing
import numpy as np
import cv2
img = cv2.imread('potato.jpg')
brown = [145, 80, 40] # RGB
diff = 20
boundaries = [([brown[2]-diff, brown[1]-diff, brown[0]-diff],
[brown[2]+diff, brown[1]+diff, brown[0]+diff])]
for (lower, upper) in boundaries:
lower = np.array(lower, dtype=np.uint8)
upper = np.array(upper, dtype=np.uint8)
mask = cv2.inRange(img, lower, upper)
output = cv2.bitwise_and(img, img, mask=mask)
ratio_brown = cv2.countNonZero(mask)/(img.size/3)
print('brown pixel percentage:', np.round(ratio_brown*100, 2))
cv2.imshow("images", np.hstack([img, output]))
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud) 为了从图像中滤除颜色,有必要设置需要检测哪种颜色的边界。我有一种感觉,这主要是一个反复试验的过程。有什么方法可以快速找到特定颜色的正确阈值?在这种特定情况下,我试图检测下图中图形的灰色区域。这当然没有检测到虚线。对于这个例子,我需要非常具体的边界。问题是,我怎样才能轻松找到它们?
hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
lower = np.array([0, 0, 0], np.uint8)
upper = np.array([180, 255, 200], np.uint8)
mask = cv2.inRange(hsv, lower, upper)
Run Code Online (Sandbox Code Playgroud)