opencv中imwrite()函数无法将图片输出,也不报错

问题:opencv中imwrite()函数无法将图片输出,也不报错

文件路径对吗

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/685066
  • 你也可以参考下这篇文章:opencv中imwrite函数
  • 除此之外, 这篇博客: opencv学习笔记之图像操作中的 imwrite()函数使用示例程序: 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #include<opencv2\opencv.hpp>  //加载OpenCV4的头文件
    #include<iostream>
    
    using namespace std;
    using namespace cv; //OpenCV命名空间
    
    void AlphaMat(Mat &mat)
    {
    	CV_Assert(mat.channels() == 4);
    	for (int i = 0; i < mat.rows; i++)
    	{
    		for(int j=0;j<mat.cols;j++)
    		{
    			Vec4b& bgra = mat.at<Vec4b>(i, j);
    			bgra[0] = UCHAR_MAX;  //蓝色通道B
    			bgra[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols)*UCHAR_MAX); //绿色通道G
    			bgra[2] = saturate_cast<uchar>((float(mat.cols - i)) / ((float)mat.rows)*UCHAR_MAX); //红色通道R
    			bgra[3] = saturate_cast<uchar>(0.5*(bgra[1] + bgra[2])); //Alpha通道
    		}
    	}
    }
    int main()
    {
    	Mat mat(480, 640, CV_8UC4);
    	AlphaMat(mat);
    	vector<int> compression_params;
    	compression_params.push_back(IMWRITE_PNG_COMPRESSION);  //PNG格式图像压缩标志
    	compression_params.push_back(9);  //设置最高压缩质量
    	bool result = imwrite("alpha.png", mat, compression_params);
    	if (!result)
    	{
    		cout << "保存成PNG格式图像失败" << endl;
    		return -1;
    	}
    	cout << "保存成功" << endl;
    	return 0;  //程序结束
    }
    

    转换前与转换后成功保存的图像对比,4通道(Alpha通道)图像可以保存成PNG格式文件。

    感谢阅读!也欢迎大家关注小白博主,多多鼓励一下!

  • 以下回答来自chatgpt:

    答案:

    根据参考资料中的段落0可以得知,imwrite()函数的参数中第一个参数是需要写入的文件名字,需要加后缀如"img.jpg";第二个参数是一般填一个Mat类型的图像数据;第三个参数是特定格式保存的参数编码,一般情况不需要填写。

    参考资料中的段落2表示,第三个参数有JPEG、PNG、BMP等格式可以选择,并改变了输出格式,把JPEG改为PNG格式且添加了参数:

    param.push_back(CV_IMWRITE_PNG_COMPRESSION);  
    param.push_back(9);
    

    其中,第一个参数表示压缩级别,0-9之间,数值越大质量越高。第二个参数是设置保存图片数据的类型,这里是PNG格式。

    因此,本问题的解决方案为:

    1.检查文件名是否正确,并且为图片格式。

    2.检查输入的图像数据是否正确。

    3.尝试改变输出格式,如将JPEG改为PNG,并尝试添加一些特定格式保存的参数编码,可以提高图像质量。

    具体实现可以参考参考资料中的段落2中的代码:

    cv::imwrite("test.png", image, param);
    

    或者参考参考资料中的段落7:

    cv2.imwrite("out.png", image)
    

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^