北京 网站建设托管公司,网站 建设ppt模板,域名访问不了织梦网站,手机广告推广软件1.背景 最近在做一点图像处理的事情#xff0c;在做处理时的cv2遇到一些小坑#xff0c;希望大家遇到的相关的问题可以注意#xff01;#xff01;
2. cv2.imwrite保存图像 cv2.imwrite(filename, img, [params]) filename#xff1a;需要写入的文件名#xff0c;包括路…1.背景 最近在做一点图像处理的事情在做处理时的cv2遇到一些小坑希望大家遇到的相关的问题可以注意
2. cv2.imwrite保存图像 cv2.imwrite(filename, img, [params]) filename需要写入的文件名包括路径和文件名以及期望的扩展名例如.jpg.png.bmp等。img需要保存的图像数据。这通常是通过其他OpenCV函数如cv2.imread()或cv2.cvtColor()等获得的NumPy数组。params这是一个可选参数用于指定JPEG或PNG格式的压缩级别等。对于其他格式此参数将被忽略。默认值为空列表[]。 cv2.imwrite(output.jpg, img, [int(cv2.IMWRITE_JPEG_QUALITY), 50]) 将JPEG的压缩质量设置为50最高质量为100然后将图像保存为新的文件output.jpg。这样保存的图像将具有较低的质量和较小的文件大小。 需要注意的是这种压缩方法是有损的也就是说压缩过程中会丢失一些图像信息。因此压缩后的图像可能无法完全还原为原始图像。在实际应用中需要根据需求和图像类型来权衡压缩质量和文件大小。
坑1cv2.imshow显示白茫茫的问题 cv2.imwrite()函数在保存图像时通常会将图像数据的dtype数据类型转换为8位无符号整数类型即dtype为uint8而cv2.imshow不会处理图像成uint8例如模型推理出来是float32类型如果用cv2.imshow显示灰度图像的话就会出现白茫茫一片 cv2.imshow显示 cv2.imwrite保存的图片 思路一直接float32转uint8回答可以但效果不好 image image.astype(np.uint8) 在轮廓边边的时候会出现锯齿(图像中偏白的线条很明显) 思路二先归一化再转uint8呢 回答可以效果很好 image cv2.normalize(image, None, 0, 255, cv2.NORM_MINMAX) image image.astype(np.uint8) 现在可以知道cv2.imwrite使用了归一化和类型转换
注意使用cv2.imshow后面要跟着cv2.waitKey(0)或者下面的代码,不然会出现不显示的问题。 if cv2.waitKey(1) 0xFF ord(q): break 3. cv2保存视频 cap cv2.VideoCapture(test.mp4)
# 检查视频是否成功打开
if not cap.isOpened():print(Error: Couldnt open the video file.)return# 获取视频的帧率
fps cap.get(cv2.CAP_PROP_FPS)
# 设置视频编码器并创建输出视频对象
fourcc cv2.VideoWriter_fourcc(*XVID) # 选择适当的编码器例如XVID, MJPG, MP4V, 等等
out cv2.VideoWriter(output_file.avi, fourcc, fps, (352, 288), isColorFalse)
while cap.isOpened():ret, frame cap.read() # 读取下一帧# 图片数据前处理if not ret:breakimg data_pre_processing(frame)compressed_data sess.run(outputs_name, {input_name: img})compressed_image data_post_processing(compressed_data)compressed_image cv2.normalize(compressed_image, None, 0, 255, cv2.NORM_MINMAX)compressed_image compressed_image.astype(np.uint8)out.write(compressed_image)# 释放资源并关闭视频文件
cap.release()
out.release()坑2保存灰度视频出错 我在数据后处理时使用了下面的代码将rgb转成了灰度图像但是cv2保存视频默认是rgb的导致保存的视频只有几KB的错误视频。 cv2.cvtColor(compressed_image, cv2.COLOR_RGB2GRAY) 解决思路查文档的api使用 cv2.VideoWriter中的isColor参数 isColorFalse: 指定输出视频是否为彩色。isColor被设置为False表示输出视频将是灰度的即不是彩色的。如果你希望输出彩色视频应该将其设置为True。默认是彩色的