opencv的图像读写非简单,只需要一个函数接口就可以完成,下面直接给大家看代码
void FileLoad()
{
Mat img = imread("../image/logo1.png");
/*可以支持的文件类型
.bmp .dib.jpeg .jpg .jpe .jp2 .png .pbm .pgm .ppm .sr .ras .tiff .tif
imread()参数
第一个是文件名 string
第二个是加载图像的颜色类型,默认是1,如果 > 0 是三通道的彩色,= 0 灰度图像 < 0 Alpha通道图像
*/
Mat img1 = imread("../image/logo1.png",2|4);
Mat img2 = imread("../image/logo1.png",0);
Mat img3 = imread("../image/logo1.png",199);
/*imshow*/
/*图下的显示,
第一个参数是 string 显示的窗口名称
第二个参数是 Mat 显示的图像
*/
//imshow("1",img1);
//imshow("2",img2);
//imshow("3",img3);
/*namedWindow 创建窗口*/
/*namedWindow("img",WINDOW_NORMAL);
Sleep(3000);
destroyAllWindows();*/
/*imwrite 输出文件*/
/*
第一个参数是string 文件名,要带上.jpg
第二个参数是img 图像数据
第三个是特定的参数编码。
如果是jpg格式的图片,参数0-100是图片的质量,默认是95
如果是png 表示压缩级别,0-9越高意味着更小的尺寸,更长压缩级别。 默认是3
如果是ppm pgm pbm表示二进制标志,,默认是1
*/
}
这是一个imwrite()的例子生成alpha图像并保存代码如下
void demowrite()
{
/*创建alpha通道的?Mat*/
Mat mat(480 ,640,CV_8UC4);
for (int i = 0 ; i <mat.rows;i++)
{
for (int j = 0;j<mat.cols;j++)
{
Vec4b &rgba = mat.at<Vec4b>(i,j);
rgba[0] = UCHAR_MAX;
rgba[1] = saturate_cast<uchar>((float(mat.cols - j)) / ((float)mat.cols)*UCHAR_MAX);
rgba[2] = saturate_cast<uchar>((float(mat.rows - i)) / ((float)mat.rows)*UCHAR_MAX);
rgba[3] = saturate_cast<uchar>(0.5 * (rgba[1] + rgba[2]));
}
}
vector<int> compression_parsms;
/*opencv3*/
compression_parsms.push_back(IMWRITE_PNG_COMPRESSION);
compression_parsms.push_back(9);
try
{
imwrite("alpha.png",mat,compression_parsms);
imshow("alpha",mat);
waitKey(0);
}
catch (runtime_error &e)
{
cout<<"输出失败"<<e.what();
return;
}
}
以上均参考学习自《opnecv3编程入门》感谢浅墨大佬。
来源:CSDN
作者:山灵鱼水
链接:https://blog.csdn.net/qq_38770502/article/details/103785614