• OpenCV(C++接口)学习笔记1-图像读取、显示、保存


    OpenCV在2.0加入版本号之后C++接口函数,学习前C语言的接口功能。现在OpenCV它已被发展到2.4.9版本号,所以,我决定学习C++接口函数,与步伐。

    1、创建图像

    cv::Mat image;
    採用类cv::Mat来定义图像变量或矩阵变量。

    当然你也能够指定图像的大小:

    cv::Mat img(240,320,CV_8U,cv::Scalar(100));
    參数CV_8U中的U代表unsigned,而S代表signed.对于三通道彩色图像能够用CV_8UC3。你也能够声明16或32位的整型三通道图像(如CV_16SC3)。

    我们能够通过调用size()函数能够获取图像的大小。

    std::cout << "size: " << image.size().height << " , " 
    << image.size().width << std::endl;

    2、获取图像

    image= cv::imread("img.jpg");

    3、显示图像

    cv::namedWindow("Original Image"); // define the window
    cv::imshow("Original Image", image); // show the image

    4、保存图像

    cv::imwrite("output.bmp", result);

    5、复制

    在这里“=”运算符使得两个图像共享同一个数据,假设想要创建一个图像并复制原图像的数据到新的内存区域,则须要调用成员函数copyTo()。

    cv::Mat image2, image3;
    image2= result; // the two images refer to the same data
    result.copyTo(image3); // a new copy is created

    所以我们能够放心地用函数返回一幅图像:

    cv::Mat function() {
    // create image
    cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
    // return it
    return ima;
    }
    在main函数中我们调用function():

    // get a gray-level image
    cv::Mat gray= function();

    则gray与ima共享的是同一数据。


    6、IplImage和Mat转换

    IplImage* iplImage = cvLoadImage("c:\img.jpg");
    cv::Mat image4(iplImage,false);

    这样的方式要注意调用cvReleaseImage(&iplImage);来释放内存。

    cv::Mat image4(iplImage,false);中的第二个參数的作用是说明是否复制图像数据到新的内存区域,false则为否,true为是。

    假设选否,则两幅图像共用同一片内存区域。此时假设调用cvReleaseImage(&iplImage);则将会使得image4中的数据被释放。


    为防止忘记释放内存,你能够採用下面方式来创建:

    cv::Ptr<IplImage> iplImage = cvLoadImage("c:\img.jpg");
    可是,最好的方法还是直接採用cv::Mat来定义图像。


    7、x。y轴的仿射变换

    cv::flip()函数进行仿射变换。函数的第三个參数取值:正则表示水平变化。0则表示垂直变化,负则两个都变。

    cv::Mat result;
    cv::flip(image,result,1); 	// positive for horizontal
    				// 0 for vertical, 
    				// negative for both

    例程1:

    /************************************************************************/
    /* 打开并显示图像,并对图像进行关于x,y轴的仿射变换                                                                     */
    /************************************************************************/
    
    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <string>
    using std::string;
    using namespace cv;
    
    int main()
    {
    	string str="E:\test\LENA.BMP";
    	Mat img1= imread(str);
    	if (img1.data)
    	{
    		namedWindow("LENA");
    		imshow("LENA",img1);
    		Mat res;
    		flip(img1,res,-1);
    		namedWindow("result");
    		imshow("result",res);
    		waitKey();
    
    	}
    
    	return 1;
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Win10 x64 + CUDA 10.0 + cuDNN v7.5 + TensorFlow GPU 1.13 安装指南
    工作十一年总结
    Anaconda3 指南
    Win Linux 双系统安装指南
    OBS 录制视频 自己留存
    React Starter Kit 中文文档
    .NET Framework 系统版本支持表
    Hyper-V和其他虚拟机共存 【转】
    Docker入门03——Container
    Docker入门02——Dockerfile详解
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4656902.html
Copyright © 2020-2023  润新知