具有已定义边的Python 3 OpenCV颜色对象检测

时间:2018-04-24 17:54:42

标签: python opencv

我的python代码通过桌面截取屏幕截图并在黑色背景上查找红色矩形,当我使用cv2.findcountours时,它不会返回一个精确大小的矩形,它似乎是扭曲的。我想获得形状的确切区域。此外,我的屏幕截图上的图像没有像素化,边框很清晰。 谢谢你的帮助!

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)

屏蔽和未屏蔽的屏幕截图

enter image description here

左侧的图像是原始屏幕截图,右侧的图像是屏蔽的。

1 个答案:

答案 0 :(得分:1)

要查找图像中的红色矩形区域,您可以执行以下操作:

  • 提取图像的红色通道
  • 阈值红色通道
  • 计算非零像素数

示例代码:

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)