OpenCV(C++接口)学习笔记1-图像的读取、显示、保存
2014-07-10 20:09
761 查看
OpenCV在2.0版本之后添加了C++接口函数,之前学习的都是C语言的接口函数,现在OpenCV已经发展到2.4.9版本了,所以决定学习C++接口函数,跟上节奏。
1、创建图像
当然你也可以指定图像的大小:
我们可以通过调用size()函数可以获取图像的大小。
2、获取图像
3、显示图像
4、保存图像
5、复制
在这里“=”运算符使得两个图像共享同一个数据,如果想要创建一个图像并复制原图像的数据到新的内存区域,则需要调用成员函数copyTo()。
所以我们可以放心地用函数返回一幅图像:
则gray与ima共享的是同一数据。
6、IplImage和Mat转换
这种方式要注意调用cvReleaseImage(&iplImage);来释放内存。
cv::Mat image4(iplImage,false);中的第二个参数的作用是说明是否复制图像数据到新的内存区域,false则为否,true为是。如果选否,则两幅图像共用同一片内存区域。此时如果调用cvReleaseImage(&iplImage);则将会使得image4中的数据被释放。
为防止忘记释放内存,你可以采用以下方式来创建:
7、x,y轴的仿射变换
cv::flip()函数进行仿射变换,函数的第三个参数取值:正则表示水平变化,0则表示垂直变化,负则两个都变。
例程1:
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; }
相关文章推荐
- OpenCV(C++接口)学习笔记1-图像读取、显示、保存
- 【基于C++和Python的Opencv3学习笔记之图像载入、显示和保存】
- Python OpenCV学习笔记之:图像读取,显示及保存
- 【OpenCV学习笔记】三、图像读取、显示及保存
- OpenCV学习笔记(一):读取、显示、保存图片
- opencv学习笔记2——载入,显示,复制,旋转,保存图像及灰度图
- 【opencv学习笔记五】一个简单程序:图像读取与显示
- opencv学习笔记 一 载入、显示和保存图像
- OpenCV 2 学习笔记(4): 加载,显示和保存图像,Mat类与IplImage类
- opencv学习笔记-图像载入、显示、保存
- opencv [c++版] 学习笔记(1) 显示图像及播放视频
- OpenCV(C++版)图像读取,创建,复制,保存,显示
- OpenCV2学习笔记04:图像的读取与显示
- Opencv学习笔记(2)模块,图像读取、显示、叠加、融合、颜色分离、亮度、对比度
- OpenCV之Python学习笔记(1)(2): 图像的载入、显示和保存 图像元素的访问、通道分离与合并
- OpenCV(C++接口)学习笔记2-像素级的图像操作
- Python3+OpenCV学习笔记(一):图像加载、显示和保存
- 【OpenCV学习笔记】【函数学习】十一(读入图像﹑显示图像和保存图像)
- opencv学习笔记之读取,修改,保存图像
- openCV-Python笔记一:图像的读取、显示和保存