1. 图像读取
导入依赖项的h文件
#include <iostream>#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
项目 | Value |
---|---|
core.hpp | 基础数据结构和操作(图像存储、矩阵运算、文件 I/O) |
highgui.hpp | 图像显示、窗口管理、用户交互(图像/视频显示、用户输入处理、结果保存) |
imgproc.hpp | 图像处理算法(图像滤波、几何变换、边缘检测、形态学操作) |
二 读取图片
Mat image; // 图像矩阵
std::cout << "This image is " << image.rows << " x "<< image.cols << std::endl;
// read the input image as a gray-scale image
image = cv::imread("E:/CODE/images/puppy.bmp", cv::IMREAD_GRAYSCALE);
cv::IMREAD_GRAYSCALE 以灰度图 ,默认是彩色图
1. Mat 常见操作
//创建Mat图像矩阵 CV_8U CV_8UC3 参数对应位数 通道数
Mat image1(240, 320, CV_8U, 100);
//100 为默认值,三通道使用cv::Scalar(0, 0, 255)
//图像直接复制
image3.copyTo(image2);
//图像对象直接继承
Mat image4(image3);
// 图像对象格式转换
image1.convertTo(image2, CV_32F, 1 / 255.0, 0.0);
// 获取mat块某一片区域
image= cv::imread("puppy.bmp");
// define image ROI at image bottom-right
imageROI= image(cv::Rect(image.cols-logo.cols,image.rows-logo.rows,logo.cols,logo.rows));// use the logo as a mask (must be gray-level)cv::Mat mask(logo);// insert by copying only at locations of non-zero mask 0值区域为透明
logo.copyTo(imageROI,mask);
2. Matx 矩阵计算
// a 3x3 matrix of double-precisioncv::Matx33d matrix(3.0, 2.0, 1.0,2.0, 1.0, 3.0,1.0, 2.0, 3.0);// a 3x1 matrix (a vector)cv::Matx31d vector(5.0, 1.0, 3.0);// multiplicationcv::Matx31d result = matrix * vector;
三 窗口响应函数
下列函数实现opencv窗口的点击事件监听
void onMouse(int event, int x, int y, int flags, void* param) {Mat* im = reinterpret_cast<Mat*>(param);switch (event) { // dispatch the eventcase cv::EVENT_LBUTTONDOWN: // mouse button down event// display pixel value at (x,y)cout << "at (" << x << "," << y << ") value is: "<< static_cast<int>(im->at<uchar>(cv::Point(x, y))) << std::endl;break;}
}
将监听函数绑定到窗口
namedWindow("Original Image"); // define the window (optional)imshow("Original Image", image); // show the image// 绑定点击事件setMouseCallback("Original Image", onMouse, reinterpret_cast<void*>(&image));
四 图像绘制内容
flip(image, result, 1); // 图像翻转
// 0 for vertical,
// negative for both
// 保存位图
imwrite("output.bmp", result); // save result// 在image中画圆
cv::circle(image, // destination image cv::Point(155, 110), // center coordinate65, // radius 0, // color (here black)3); // thickness
// 在图像上写字
cv::putText(image, // destination image"This is a dog.", // textcv::Point(40, 200), // text positioncv::FONT_HERSHEY_PLAIN, // font type2.0, // font scale255, // text color (here white)2); // text thickness