在一个范围内查找特定的坐标像素,该范围内也有像素强度

2024-04-26 11:57:02 发布

您现在位置:Python中文网/ 问答频道 /正文

比如说,

对于坐标图像(X,Y),即(576,0)到(7261371),我想知道哪些坐标的像素强度范围为红色[165到225]绿色[176到200]和蓝色[186到198]

输出代码是坐标


Tags: 代码图像像素蓝色绿色红色强度
1条回答
网友
1楼 · 发布于 2024-04-26 11:57:02

这里有一种使用Python/OpenCV/Numpy实现这一点的方法

  • 为区域创建遮罩
  • 从颜色创建遮罩
  • 组合面具
  • 获取组合遮罩不是黑色的坐标

输入:

enter image description here

import cv2
import numpy as np

# load image
img = cv2.imread("monet2.jpg")

# create region mask
mask1 = np.zeros_like(img)[:,:,0]
mask1[0:0+75, 90:90+75] = 255

# create color mask
lower =(0,100,150) # lower bound for each channel
upper = (40,160,2100) # upper bound for each channel
mask2 = cv2.inRange(img, lower, upper)

# combine masks
mask3 = cv2.bitwise_and(mask1, mask2)

# get coordinates
coords = np.argwhere(mask3)
for p in coords:
    px = (p[0],p[1])
    print (px)


# apply mask to image (to see where data is obtained)
mask3 = cv2.merge([mask3,mask3,mask3])
img_masked = cv2.bitwise_and(img, mask3)


# display images
cv2.imshow("mask1", mask1)
cv2.imshow("mask2", mask2)
cv2.imshow("mask3", mask3)
cv2.imshow("img_masked", img_masked)
cv2.waitKey(0)

# write results to disk
cv2.imwrite("monet2_mask1.jpg", mask1)
cv2.imwrite("monet2_mask2.jpg", mask2)
cv2.imwrite("monet2_mask3.jpg", mask3)
cv2.imwrite("monet2_masked.jpg", img_masked)


区域掩码:

enter image description here

彩色遮罩:

enter image description here

组合遮罩:

enter image description here

遮罩图像:

enter image description here

坐标表:

(6, 128)
(7, 122)
(7, 125)
...
(63, 125)
(63, 126)
(63, 134)
(63, 135)

相关问题 更多 >