转载自:http://blog.csdn.net/szlcw1/article/details/37662935
OpenCV在2.0版本之后添加了C++接口函数,之前学习的都是C语言的接口函数,现在OpenCV已经发展到2.4.9版本了,所以决定学习C++接口函数,跟上节奏。
1、创建图像
1
|
cv::Mat image;
|
当然你也可以指定图像的大小:
1
|
cv::Mat img(240,320,CV_8U,cv::Scalar(100));
|
我们可以通过调用size()函数可以获取图像的大小。
1
2
|
std::cout <<
"size: "
<< image.size().height <<
" , "
<< image.size().width << std::endl;
|
1
|
image= cv::imread(
"img.jpg"
);
|
1
2
|
cv::namedWindow(
"Original Image"
);
// define the window
cv::imshow(
"Original Image"
, image);
// show the image
|
1
|
cv::imwrite(
"output.bmp"
, result);
|
5、复制
在这里“=”运算符使得两个图像共享同一个数据,如果想要创建一个图像并复制原图像的数据到新的内存区域,则需要调用成员函数copyTo()。
1
2
3
|
cv::Mat image2, image3;
image2= result;
// the two images refer to the same data
result.copyTo(image3);
// a new copy is created
|
1
2
3
4
5
6
|
cv::Mat function() {
// create image
cv::Mat ima(240,320,CV_8U,cv::Scalar(100));
// return it
return
ima;
}
|
1
2
|
// get a gray-level image
cv::Mat gray= function();
|
则gray与ima共享的是同一数据。
6、IplImage和Mat转换
1
2
|
IplImage* iplImage = cvLoadImage(
"c:\\img.jpg"
);
cv::Mat image4(iplImage,
false
);
|
这种方式要注意调用cvReleaseImage(&iplImage);来释放内存。
cv::Mat image4(iplImage,false);中的第二个参数的作用是说明是否复制图像数据到新的内存区域,false则为否,true为是。如果选否,则两幅图像共用同一片内存区域。此时如果调用cvReleaseImage(&iplImage);则将会使得image4中的数据被释放。
为防止忘记释放内存,你可以采用以下方式来创建:
1
|
cv::Ptr<IplImage> iplImage = cvLoadImage(
"c:\\img.jpg"
);
|
7、x,y轴的仿射变换
cv::flip()函数进行仿射变换,函数的第三个参数取值:正则表示水平变化,0则表示垂直变化,负则两个都变。
1
2
3
4
|
cv::Mat result;
cv::flip(image,result,1);
// positive for horizontal
// 0 for vertical,
// negative for both
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
/************************************************************************/
/* 打开并显示图像,并对图像进行关于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;
}
|