1.背景
最近在做一点图像处理的事情,在做处理时的cv2遇到一些小坑,希望大家遇到的相关的问题可以注意!!
2. cv2.imwrite保存图像
filename
:需要写入的文件名,包括路径和文件名,以及期望的扩展名(例如,.jpg,.png,.bmp等)。img
:需要保存的图像数据。这通常是通过其他OpenCV函数(如cv2.imread()
或cv2.cvtColor()
等)获得的NumPy数组。params
:这是一个可选参数,用于指定JPEG或PNG格式的压缩级别等。对于其他格式,此参数将被忽略。默认值为空列表[]
。
将JPEG的压缩质量设置为50(最高质量为100),然后将图像保存为新的文件'output.jpg'。这样保存的图像将具有较低的质量和较小的文件大小。
需要注意的是,这种压缩方法是有损的,也就是说,压缩过程中会丢失一些图像信息。因此,压缩后的图像可能无法完全还原为原始图像。在实际应用中,需要根据需求和图像类型来权衡压缩质量和文件大小。
坑1:cv2.imshow显示白茫茫的问题
cv2.imwrite()
函数在保存图像时,通常会将图像数据的dtype(数据类型)转换为8位无符号整数类型(即dtype为uint8
),而cv2.imshow不会处理图像成uint8,例如模型推理出来是float32类型,如果用cv2.imshow显示灰度图像的话就会出现白茫茫一片!!!
思路一:直接float32转uint8!!回答:可以!但效果不好
在轮廓边边的时候会出现锯齿!!!(图像中偏白的线条很明显)
思路二:先归一化再转uint8呢? 回答:可以!效果很好!!!
现在可以知道cv2.imwrite使用了归一化和类型转换
注意:使用cv2.imshow后面要跟着cv2.waitKey(0)或者下面的代码,不然会出现不显示的问题。
3. cv2保存视频
坑2:保存灰度视频出错
我在数据后处理时使用了下面的代码,将rgb转成了灰度图像,但是cv2保存视频默认是rgb的,导致保存的视频只有几KB的错误视频。
解决思路:查文档的api使用