【发布时间】:2017-08-23 09:44:20
【问题描述】:
我正在处理一个应用 OpenCV 的小项目,但我遇到了一些我不知道如何实现的问题。假设我有一张图片 (1024x768)。在这张图片的中心有一个红色的边界框。
是否可以使用OpenCS 计算红色框内的像素?假设图像尺寸为1024x768。
我尝试通过对红色进行阈值处理来使用边界矩形并尝试使用convexhull,但我无法提取红色标记内有多少像素。
【问题讨论】:
我正在处理一个应用 OpenCV 的小项目,但我遇到了一些我不知道如何实现的问题。假设我有一张图片 (1024x768)。在这张图片的中心有一个红色的边界框。
是否可以使用OpenCS 计算红色框内的像素?假设图像尺寸为1024x768。
我尝试通过对红色进行阈值处理来使用边界矩形并尝试使用convexhull,但我无法提取红色标记内有多少像素。
【问题讨论】:
这很简单。显然内部灰色和外部颜色是不同的。只是对图像进行阈值处理。
ret,thresh=cv2.threshold(img,133,255,cv2.THRESH_BINARY_INV)
然后使用:
cv2.countNonZero(your_thresh_img)
这为您提供了白色像素的数量,这是您需要的数量。在您的图像中,它是 183920 像素。
编辑
import numpy as np
import cv2
img=cv2.imread("your_image.png",0)
def nothing(x):
pass
cv2.namedWindow('image')
cv2.createTrackbar('min','image',0,255,nothing)
cv2.createTrackbar('max','image',0,255,nothing)
while(1):
a = cv2.getTrackbarPos('min','image')
b = cv2.getTrackbarPos('max','image')
ret,thresh=cv2.threshold(img,a,b,cv2.THRESH_BINARY_INV)
cv2.imshow("output",thresh)
k = cv2.waitKey(10) & 0xFF
if k == 27:
break
print cv2.countNonZero(thresh)
cv2.destroyAllWindows()
【讨论】: