OpenCV 图像直方图绘制与分析 - 解决 'cv2.error: (-5:Bad argument) in function 'line'' 错误

在使用 OpenCV 进行图像处理时,图像直方图是一个重要的分析工具,它可以帮助我们了解图像的像素强度分布。本文将介绍如何使用 OpenCV 和 Matplotlib 在 Python 中绘制和分析图像直方图,并解决常见的 cv2.error: (-5:Bad argument) in function 'line'' 错误。

代码示例:

import cv2
from matplotlib import pyplot as plt
import numpy as np

# 读取图像
img = cv2.imread('c.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 计算直方图
hist = cv2.calcHist([gray], [0], None, [256], [0, 256])
hist = np.squeeze(hist)

# 创建直方图图像
hist_img = np.zeros((256, 256, 3), dtype=np.uint8)

# 归一化直方图
cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)

# 绘制直方图线条 (修复错误的关键)
for i in range(256):
    # 确保线条坐标为整数
    cv2.line(hist_img, (i, 255), (i, int(255 - hist[i])), (255, 255, 255), thickness=1)

# 显示图像和直方图
plt.subplot(221), plt.imshow(img, 'gray'), plt.title('Image')
plt.subplot(222), plt.hist(img.ravel(), 256, [0, 256]), plt.title('Histogram'), plt.xlim([0, 256])
plt.subplot(223), plt.imshow(hist_img), plt.title('Histogram_opencv')
plt.show()

错误分析:

cv2.error: OpenCV(4.7.0) :-1: error: (-5:Bad argument) in function 'line' 错误通常是由于 cv2.line() 函数的参数类型或取值范围不正确导致的。

在这个例子中,错误的原因是 hist[i] 的值可能不是整数,导致线条的 y 坐标计算结果不是整数。cv2.line() 函数要求所有坐标参数都必须是整数。

解决方法:

为了解决这个问题,我们需要确保传递给 cv2.line() 函数的坐标参数都是整数。可以使用 int() 函数将 hist[i] 转换为整数:

cv2.line(hist_img, (i, 255), (i, int(255 - hist[i])), (255, 255, 255)) 

总结:

本文介绍了如何使用 OpenCV 和 Matplotlib 绘制和分析图像直方图,并针对常见的 cv2.error: (-5:Bad argument) in function 'line'' 错误提供了详细的解释和解决方案。通过将 cv2.line() 函数的坐标参数转换为整数,我们可以避免这个错误并成功绘制直方图。

OpenCV 图像直方图绘制与分析 - 解决 'cv2.error: (-5:Bad argument) in function 'line'' 错误

原文地址: https://www.cveoy.top/t/topic/jtfQ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录