OpenCV(二)
如何用C++控制图像
1.OpenCV库的常用模块
- “core.hpp”包含程序库的核心功能,特别是基本的数据结构和算法函数
- “highgui.hpp”包含图像、视频读写函数和部分用户界面函数
2.装载、显示和存储图像
#include <cv.h>
#include <highgui.hpp>
#include <core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image;
image = imread("/home/elephantameler/yang.jpg");//创建一个Mat类型并赋予图像,“其中填绝对路径”
namedWindow("Original Image");//命名对话框的名字
imshow("Original Image",image);//将对话框名字赋予image,并打开此图像
waitKey(0);//打开图像
return 0;
}
#include <cv.h>
#include <highgui.hpp>
#include <core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image;
image = imread("/home/elephantameler/yang.jpg",CV_LOAD_IMAGE_GRAYSCALE);
namedWindow("Original Image");
imshow("Original Image",image);
Mat result;
flip(image,result,1);//flip:图像转换函数
/*
正数表示对称翻转
0表示90度翻转
负数表示90度翻转+对称翻转
*/
namedWindow("Output Image");
imshow("Output Image",result);
imwrite("/home/elephantameler/yang2.jpg",result);//j将result保存至此路径,并按yang2.jpg保存
waitKey(0);
}
#include <cv.h>
#include <highgui.hpp>
#include <core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image;
image = imread("/home/elephantameler/yang.jpg",CV_LOAD_IMAGE_GRAYSCALE);
circle(image,Point(50,50),50,0,3);
/*在图像上绘制形状
circle(目标图像,中心点坐标,半径,颜色,厚度);
此外还有cilcle,ellipse,line,rectangle方法
*/
putText(image,"She is YM",Point(0,100),FONT_HERSHEY_PLAIN,2.0,255,2);
/*在图像上写入文本
putText(目标图像,文本,文本位置,字体类型,字体大小,字体颜色,文本厚度);
*/
namedWindow("Original Image");
imshow("Original Image",image);
waitKey(0);
}
3.如何在图像中插入另一个图像
定义一个ROI :region of interest(兴趣区域)的Mat对象
#include <cv.h>
#include <highgui.hpp>
#include <core.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image;
image = imread("/home/elephantameler/China.jpg");
Mat logo = Mat(50,90,CV_8UC3,Scalar(255,0,0));
//Method.1
Mat imageROI(image,Rect(image.cols-logo.cols,image.rows-logo.rows,logo.cols,logo.rows));
/*Method.2
Mat imageROI = image(Range(image.rows-logo.rows,image.rows)),
Range(image.cols-logo.cols,image.cols));
*/
/*Method.3
Mat imageROI;
imageROI = image.rowRange(image.rows-logo.rows,image.rows);
imageROI = image.colRange(image.cols-logo.cols,image.cols);
*/
logo.copyTo(imageROI);
imshow("ROI",image);
waitKey(0);
return 0;
}