【问题标题】:Iterating over an image given a numpy ndarray for certain colored pixels in it在给定一个 numpy ndarray 的图像上迭代图像中的某些彩色像素
【发布时间】:2022-07-27 02:54:09
【问题描述】:

我有一张全是黑白的图像,并且在黑色部分(粉红色)上有一定的彩色像素(这些彩色像素都是相同的,即它们具有相同的 rgb 值)。 对于图像中的那些粉红色像素,我有 numpy ndarray。并使用该 ndarray 我想遍历图像,以这样一种方式,对于每个彩色粉红色像素,我都会正交(黄色我已经描绘了我需要行进的方向)。 我需要以某种方式找出黑色部分的宽度。

与该像素描述成 90 度: [![与该像素描述成 90 度][1]][1]

当我这样做时,我基本上需要记下像素的急剧变化,当我看到黑色像素到白色之间的过渡时,我需要记下从彩色像素点到过渡点的距离.

我编写了这段代码,它向我展示了图像(rgb)中的像素,但不适用于我当前的示例。..

for i, j in np.ndindex(img.shape[:-1]): 
  print(img[i,j])

【问题讨论】:

    标签: image-processing computer-vision numpy-ndarray pixel orthogonal


    【解决方案1】:

    下面是方法,输入图像 (image.png) 为:

    import cv2
    import numpy as np
    
    img = cv2.imread("image.png")
    h, w, _ = img.shape
    x, y = 300, 160 # Random point on the pink line
    strip = img[:, x]
    diff = np.diff(np.sum(strip, 1))
    
    # Get y coordinates where...
    # white -> black
    # black -> pink
    # pink  -> black
    # black -> white
    y1, y2, y3, y4 = np.where(diff)[0] 
    
    cv2.line(img, (x, y1), (x, y2), (0, 0, 255), 5)
    cv2.line(img, (x, y3), (x, y4), (0, 0, 255), 5)
    cv2.putText(img, str(y1), (x, y2 - 20), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2)
    cv2.putText(img, str(h - y3), (x, y4 - 20), cv2.FONT_HERSHEY_COMPLEX, 1, (0, 255, 0), 2)
    
    cv2.imshow("result", img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    输出:

    【讨论】:

    • 感谢您的宝贵意见,我有一个问题,因为我提到我已经有彩色像素的 ndarray,我的意思是只使用它来遍历图像(这样做我会只能迭代彩色像素,这是我需要的),那么我该如何实现呢?
    • @quest1001 彩色像素的 ndarray 是什么意思?
    • 安我的意思是遍历轮廓列表,对于每个点我上下 90 度(垂直)找到垂直向量,然后计算距离直到遇到白色像素我会以某种方式获得宽度吗??
    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 2013-08-30
    相关资源
    最近更新 更多