【问题标题】:How to draw vertical histogram projection on x axis?如何在 x 轴上绘制垂直直方图投影?
【发布时间】:2021-05-02 06:35:30
【问题描述】:

这里是来自Article的图像直方图水平投影示例

for row in range(height):
    cv2.line(blankImage, (0,row), (int(horizontal_projection[row]*width/height),row), (255,255,255), 1)

我已经相应地创建了垂直投影:

vertical_projection = np.sum(binarizedImage, axis=0);

并将 for 循环更改为在空白图像上投影值

for col in range(width):
cv2.line(blankImage, (col,0), (col, int(myprojection[col]*width/height)),  (255,255,255), 1)

但是代码没有产生预期的结果。

输入图片:

垂直直方图投影

去掉乘数后*width/height

    for col in range(width):
    cv2.line(blankImage, (col,0), (col, int(myprojection[col])),  (255,255,255), 1)

新的直方图投影

您能否建议如何将这个 for 循环 转换为在 x 轴上绘制垂直直方图投影、自下而上和缩放?

【问题讨论】:

    标签: python opencv computer-vision opencv3.0 opencv-python


    【解决方案1】:

    您可以使用这种更简单的方法

    import cv2
    import numpy as np
    
    image = cv2.imread("image.png")
    cv2.imshow("image", image)
    
    height, width, _ = image.shape
    
    gray_scale = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    _, threshold_image = cv2.threshold(gray_scale, 0, 255, cv2.THRESH_BINARY_INV)
    cv2.imshow("threshold_image", threshold_image)
    
    vertical_pixel_sum = np.sum(threshold_image, axis=0)
    myprojection = vertical_pixel_sum / 255
    
    blankImage = np.zeros_like(image)
    for i, value in enumerate(myprojection):
        cv2.line(blankImage, (i, 0), (i, height-int(value)), (255, 255, 255), 1)
    
    cv2.imshow("New Histogram Projection", blankImage)
    
    cv2.waitKey(0)
    

    【讨论】: