做网站时网页中格式对不齐怎么办,可以做app的手机软件,官网微信,火车票网站建设多少钱OpenCV 3.1 imwrite()函数写入异常问题解决方法最近配置了OpenCV3.1版本#xff0c;按照2.x的习惯写了一个保存图片的代码#xff08;测试证明该代码在2.4.11下运行正常#xff09;#xff0c;但是在使用imwrite()函数的时候出现了异常。 代码如下#xff1a;#include 按照2.x的习惯写了一个保存图片的代码测试证明该代码在2.4.11下运行正常但是在使用imwrite()函数的时候出现了异常。 代码如下#include opencv2/imgproc/imgproc.hpp
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hpp
#include iostreamusing namespace std;
using namespace cv;int main()
{Mat SrcImage imread(1.jpg);imwrite(读入的图片.png, SrcImage);imshow(原图, SrcImage);waitKey(0);return 0;
}只是很简单的读入一个图片然后再保存它。运行后异常如下 修改办法 1.是将debug模式修改为Release代码不用修改的情况下即可正常运行。 2.将imwrite()函数写入第三个参数我们查看imwrite()的定义可以看到一个官方给出的例子 #include opencv2/opencv.hppusing namespace cv;using namespace std;void createAlphaMat(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.atVec4b(i, j);bgra[0] UCHAR_MAX; // Bluebgra[1] saturate_castuchar((float (mat.cols - j)) / ((float)mat.cols) * UCHAR_MAX); // Greenbgra[2] saturate_castuchar((float (mat.rows - i)) / ((float)mat.rows) * UCHAR_MAX); // Redbgra[3] saturate_castuchar(0.5 * (bgra[1] bgra[2])); // Alpha}}}int main(int argv, char **argc){// Create mat with alpha channelMat mat(480, 640, CV_8UC4);createAlphaMat(mat);vectorint compression_params;compression_params.push_back(IMWRITE_PNG_COMPRESSION);compression_params.push_back(9);try {imwrite(alpha.png, mat, compression_params);}catch (cv::Exception ex) {fprintf(stderr, Exception converting image to PNG format: %s\n, ex.what());return 1;}fprintf(stdout, Saved PNG file with alpha data.\n);return 0;}IMWRITE_PNG_COMPRESSION 为对于PNG格式的图片这个参数表示压缩级别CV_IMWRITE_PNG_COMPRESSION从0到9。较高的值意味着更小的尺寸和更长的压缩时间而默认值是3。 所以上述程序中选择了压缩级别为9。除此之外OpenCV还提供了很多种其他的保存格式在转到定义后的imgcodecs.hpp文件中都有很详细的介绍。所以 我们只需要简单改写代码即可解决异常问题。#include opencv2/imgproc/imgproc.hpp
#include opencv2/core/core.hpp
#include opencv2/highgui/highgui.hpp
#include iostreamusing namespace std;
using namespace cv;int main()
{Mat SrcImage imread(1.jpg);vectorint compression_params;compression_params.push_back(IMWRITE_PNG_COMPRESSION);compression_params.push_back(9);imwrite(读入的图片.png, SrcImage, compression_params);imshow(原图, SrcImage);waitKey(0);return 0;
}最后用以上两种办法都解决了异常但是异常产生的原因是什么为什么这样做就没有异常了尤其是params参数本身就带默认值。这个问题我也没有弄明白弄懂后在更新出来。 转载自 https://cloud.tencent.com/developer/article/1010015