opencv 直方图均衡化(-215:Assertion failed) _src.type() == CV_8UC1 in function ‘equalizeHist‘

本文探讨了在使用OpenCV进行图像处理时,遇到的将uint16类型图像转换为uint8类型的错误,重点在于理解原因——数据类型不匹配,并提供了相应解决方法,包括使用cv2.equalizeHist时的数据类型转换技巧。
摘要由CSDN通过智能技术生成

……
median = cv2.medianBlur(img_dif2, 5)
print(type(median),median.shape,median.dtype)
#cv2.imshow(“median-image”, median)
cv2.imwrite(‘img_geo_dif_median2.png’,median)
Grayimg = median
print(Grayimg.shape)
hist = cv2.equalizeHist(Grayimg)
#cv2.imshow(‘hist’,hist)
cv2.imwrite(‘img_geo_dif_hist2.png’,hist)
img3 = cv2.imread(“./img_geo_dif_hist2.png”,3)
print(img3[1,1,0].dtype)

报错:
<class ‘numpy.ndarray’> (1024, 1024) uint16
(1024, 1024)
OpenCV(4.5.5) /io/opencv/modules/imgproc/src/histogram.cpp:3439: error: (-215:Assertion failed) _src.type() == CV_8UC1 in function ‘equalizeHist’
报错原因:直方图输入数据为uint16,而opencv要求数据格式为uint8.
般的图像文件格式使用的是 Unsigned 8bits吧,CvMat矩阵对应的参数类型就是
CV_8UC1,CV_8UC2,CV_8UC3。
(最后的1、2、3表示通道数,譬如RGB3通道就用CV_8UC3)

而float 是32位的,对应CvMat数据结构参数就是:CV_32FC1,CV_32FC2,CV_32FC3…
double是64bits,对应CvMat数据结构参数:CV_64FC1,CV_64FC2,CV_64FC3等。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值