Python3 OpenCV颜色对象检测与定义的边缘
我的python代码通过桌面截图,在黑色背景上寻找一个红色矩形,当我使用cv2.findcontours时,它没有返回一个精确大小的矩形,它似乎被扭曲了。我想获得形状的确切面积。另外,我截图上的图像没有像素化,边界很清晰。 谢谢你的帮助Python3 OpenCV颜色对象检测与定义的边缘,python,opencv,Python,Opencv,我的python代码通过桌面截图,在黑色背景上寻找一个红色矩形,当我使用cv2.findcontours时,它没有返回一个精确大小的矩形,它似乎被扭曲了。我想获得形状的确切面积。另外,我截图上的图像没有像素化,边界很清晰。 谢谢你的帮助 frame_TS_new_raw = np.array(sct.grab(monitor_TS_new)) frame_TS_new = cv2.cvtColor(frame_TS_new_raw, cv2.COLOR_RGBA2RGB) green_mask
frame_TS_new_raw = np.array(sct.grab(monitor_TS_new))
frame_TS_new = cv2.cvtColor(frame_TS_new_raw, cv2.COLOR_RGBA2RGB)
green_mask_TS_new = cv2.inRange(frame_TS_new,green_lower_range, green_upper_range)
# find contours for New TS
cnts_green_new = cv2.findContours(green_mask_TS_new.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
cnts_green_new = cnts_green_new[0] if imutils.is_cv2() else cnts_green_new[1]
if len(cnts_green_new) > 0:
for c in cnts_green_new:
# if the contour is not sufficiently large, ignore it
if cv2.contourArea(c) > 100:
area = cv2.contourArea(c)
蒙版和未蒙版的屏幕截图
左侧的图像是原始屏幕截图,右侧的图像是遮罩图像。要查找图像中的红色矩形区域,可以执行以下操作:
- 提取图像的红色通道
- 阈值红色通道
- 计数非零像素数
import cv2
import numpy as np
img = cv2.imread('vju0v.png')
img = np.array(img) # convert to numpy array
red = img[:,:,2] # extract red channel
rect = np.float32(red > 200) # find red pixels
area = np.sum(rect) # count nonzero pixels
print('Area = ' + str(area))
cv2.imshow('Red Channel',rect)
cv2.waitKey(0)
你说的“左边的图像”和“右边的图像”是什么意思?只有一个巨大的白色图像,左上角有两个小斑点……是的,谢谢你,我编辑了图像,使它变大了。谢谢,我有没有办法使用这种计算像素的方法,但使用一个范围,因为我需要检测三种不同的红色,但我不想重叠其他颜色(例如深红色和灰色)?您可以将范围定义为rect=np.float32(红色>200,红色<225)其他颜色的范围如何?例如,如果我希望红色从30到255,绿色0到100,蓝色0到85?您可以获得三个通道,分别为红色=img[:,:,2]和绿色=img[:,:,1]和蓝色=img[:,:,:,0],并使用您的范围获取颜色。我得到以下错误:rect=np.float32(红色>30,红色<255)#查找红色像素值错误:包含多个元素的数组的真值不明确。使用a.any()或a.all()