【opencv】 读imread()、写imwrite()、显示imshow()。

佐手、 提交于 2019-12-31 18:32:41

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编程入门》感谢浅墨大佬。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!