个人学习OpenCV时的笔记,为方便各位网友及本人自己查阅,现做出如下记录:
直接上代码:
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace std;
using namespace cv;
// 提前声明需要调用的方法
void onMouse(int event, int x, int y, int flgs, void* param);
int main(int atgc, char *argv[]){
cv::Mat image; // 创建一个空图像
std::cout << "This image is " << image.rows << " x " << image.cols << std::endl;
image = cv::imread("E:/earth.jpg"); // 读取图像
if (image.empty()){
cout << "read image error!" << endl;
return 0;
}
// 翻转图像的例子
Mat flipImage;
flip(image, flipImage, 1); // 正数表示水平, 0表示垂直, 负数表示水平和垂直
// 文件的读写操作
//imwrite("E:/flipImage.jpg", flipImage);
// 读取一个图片并且转换成灰度图像
Mat grayImage = imread("E:/earth.jpg", CV_LOAD_IMAGE_GRAYSCALE);
Mat threeChannel = imread("E:/earth.jpg", CV_LOAD_IMAGE_COLOR);
cout << "All channels :" << threeChannel.channels() << endl;
// 在图像上画图形或者写文字
circle(image,
Point(122, 110), // 圆的中心
65, // 半径
0, // 颜色
3); // 厚度
putText(image,
"This is a picture",
Point(40, 40),
cv::FONT_HERSHEY_PLAIN, // 字体类型
2.0, // 字体大小
255, // 字体颜色
2 // 文本厚度
);
图像显示
cvNamedWindow("pic", CV_WINDOW_AUTOSIZE);
imshow("pic", image);
cvNamedWindow("pic1", CV_WINDOW_AUTOSIZE);
imshow("pic1", flipImage);
// 鼠标点击时间判别
setMouseCallback("pic", onMouse, reinterpret_cast<void*>(&image));
waitKey(0);
return 0;
}
// 方法实现
void onMouse(int event, int x, int y, int flgs, void* param){
Mat *im = reinterpret_cast<Mat*>(param);
switch (event)
{
case CV_EVENT_LBUTTONDOWN: // 鼠标左键按下时间的触发回调函数
cout <<"at (" << x << "," << y <<") value is:" << static_cast<int>(im->at<uchar>(Point(x, y))) << endl;
break;
}
}
参考:OpenCV计算机视觉编程攻略