python - 如何检测指定 x,y 位置的白色像素
问题描述
我有一个图像,我使用给定的 x,y 坐标在 OpenCV 中进行屏蔽和裁剪。我还尝试检测并显示所述图像中的白色像素,这要归功于我在另一篇 Stackoverflow 帖子中得到的答案的帮助。
我目前有以下内容:
import numpy as np
import cv2
img = cv2.imread('Image.jpg')
#img = cv2.imread('Image2.jpg')
#img = cv2.imread('Image3.jpg')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (1512, 20, 180, 185) # boundary of interest
cv2.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv2.GC_INIT_WITH_RECT)
mask2 = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8')
img = img * mask2[:, :, np.newaxis]
cv2.imwrite('Image_mask.jpg', img)
# x,y coordinates for specified "fixed" location
mx = (1510, 22, 110, 185)
x, y, h, w = mx
# Output to files
crop = img[y:y+h, x:x+w]
cv2.imwrite('Image_crop.jpg', crop)
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
cv2.imwrite('Image_cont.jpg', img)
# Detect white pixels from cropped image
img = cv2.imread('Image_crop.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,gray = cv2.threshold(gray, 150,255,0)
gray2 = gray.copy()
cv2.imshow('IMG',gray2)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
理想情况下,我现在想做的是尝试查看位置(对象周围的 20x20 正方形)是否有白色像素,然后打印出来。我将如何去做这件事。
我是否必须根据我得到的裁剪再次手动选择 x,y 坐标,然后检测白色像素,如果可以,是否可以同时使用两个不同的坐标进行操作,或者是否有更简单的方法?
解决方案
您可以对正方形内的像素值求和,如果数字高于某个阈值,则存在非黑色像素。如果您绝对确定背景是全黑的,那么您可以检查像素值总和是否非零,以断言您正在评估的区域中有白色像素。
crop = img[y:y+h, x:x+w]
if crop.sum() > 0:
print("White pixels detected")
或使用 numpy:
np.sum(crop)
推荐阅读
- selenium - 将脚本运行 7 小时是一种好方法吗?
- c# - 如何获取创建的对象“单元格”的范围?
- html - 纯CSS视差效果+溢出:隐藏替代?
- java - 在 mvn clean install 之后 Cobertura 没有生成覆盖率报告
- python - 在python中计算行计数器变量
- bash - 运行 bash 脚本的区别
- css - 在进行服务器端渲染时,伪类 ":first-child" 可能不安全。尝试将其更改为 ":first-of-type"
- python - 如何在可以通过关键字访问的列表中创建列表
- python - 为什么我得到对象不可调用?
- javascript - 单击时如何为字符串的一部分创建边框:Reactjs