关于使用cv2.createCLAHE()的一个问题

我对图像进行自适应直方图均衡化时,也就是应用cv2.createCLAHE(),出现了error: (-215:Assertion failed) _src.type() == CV_8UC1 || _src.type() == CV_16UC1 in function ‘`anonymous-namespace’::CLAHE_Impl::apply’
后来从网上这个博客添加链接描述中找到答案,他是说将读取的图片通道改为单通道。在这里插入图片描述
上面所说的图片的通道指的是cv2.imread()中有一个flag参数是有关通道的设置,详情请看opencv中imread第二个参数的含义

img=cv2.imread(image_list[0],1)#flag = 1,   8位深度,3通道

之前我flag参数设为1,也就是,8位深度,3通道,其实这我也不太清楚深度是啥,不过这通道好像就是我们常听到的RGB三层。

解决方案有两个。

第一个就是cv2.imread()改flag参数,flag=0,flag=2,都是以单通道的形式提取图片。

第二个方法就是将读取的三通道图片变为三层单独的图片,也就是[将RGB图像的三个通道拆分开],然后在每个单通道上应用cv2.createCLAHE()(https://blog.csdn.net/weixin_43624538/article/details/87436154)

代码流程是:

img=cv2.imread(image_list[0],1)#flag = 1,   8位深度,3通道
clahe=cv2.createCLAHE(clipLimit=2,tileGridSize=(16,16))#自适应直方图均衡化
planes=cv2.split(img)#将图片分为三个单通道,
    for i in range(0,3):
    #可能是因为读取到的图片是三通到,而cv2.createCLAHE只能对单通道图片处理
    #所有用cv2.split()将图片变为三个单通道,然后在应用cv2.createCLAHE处理
        planes[i]=clahe.apply(planes[i])
    img=cv2.merge(planes)

其中cv2.merge()是将变为三个单通道图片,重新变为一个三通道图片。cv2.split()就是将图片的三个通道拆分开。clahe.apply()就是将cv2.createCLAHE()应用到每个通道上。

在介绍个挺有用的一条程序,之前我知道运用matplotlib库让多个图同时显示,在cv2库中不知道如何同时显示多个图片。
偶然发现有个程序同时显示多个图,就在这里面[添加链接描述]。(https://www.cnblogs.com/my-love-is-python/p/10405811.html)

cv2.imshow('ret', np.hstack((img, ret))) #同时显示多张图片

img和ret都表示是一张图片。

如何让图片一直显示出来,其实cv2.imshow()显示的图片只是一闪而过,都还没看清,就无了,解决的方案
就是添加一行代码即可

cv.waitKey(0)

你可能感兴趣的:(成长的历程,python,opencv)