OpenCV的主要模块:
- Core—核心组件模块
- Imgproc—图像处理模块
- Highgui—顶层GUI及视频I/O
- Video—视频分析
- Calib3d—摄像机标定及三维重建
- Features2d—2维特征框架
- Objdetect—目标检测
- M1—机器学习
- Flann—聚类及多维空间搜索
- Gpu—计算机视觉中GPU加速
- Stitching—图像拼接
Mat类
图像数据结构Mat类能够自动管理内存,Mat类由矩阵头和指向存储所有像素值的矩阵的指针构成
Mat类常用函数功能
Mat::row 创建一个具有指定了矩阵头中行数的参数的矩阵
Mat::col 创建一个具有指定了矩阵头中列数的参数的矩阵
Mat::rowRange 为指定的行span创建一个新的矩阵头,可取指定行区间元素
Mat::colRange 为指定的列span创建一个新的矩阵头,可取指定列区间元素
Mat::clone 创建一个数组及其基础数据的完整版本
Mat::copyTo 把矩阵复制到另一个矩阵中
Mat::convertTo 在缩放或不缩放的情况下转换为另一种数据类型
Mat::zeros 返回指定大小和类型的零数组
Mat::ones 返回一个指定大小和类型全为1的数组
Mat::channels 返回矩阵通道的数目
Mat::empty 如果数据没有elements,返回true
Mat::at 返回对指定数组元素的引用
代码1.1
//图像读取显示保存操作
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{
//读入图像
Mat srcImage = imread("dog.png");
if (srcImage.empty())
{
return -1;
cout << "未找到图像" << endl;
}
//转为灰度图
Mat srcGray;
cvtColor(srcImage, srcGray, CV_RGB2GRAY);
imshow("srcGray", srcGray);
//均值平滑
Mat blurDstImage;
blur(srcGray, blurDstImage, cv::Size(5, 5),cv::Point(-1,-1));
cv::imshow("blurDstImage", blurDstImage);
//写入图像
imwrite("blurDstImage.png", blurDstImage);
cv::waitKey(0);
return 0;
}
左图为灰度图,右图为平滑后的图像
图像的几何变换
图像的几何变换是指在不改变图像像素值的前提下对图像像素进行空间几何变换,常见的几何变换有距离变换、坐标映射、平移、镜像、旋转、缩放、仿射变换等。
坐标映射
图像的坐标映射是通过图像和目标图像之间建立一种映射关系,包含正映射和反映射。
#include<iostream>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/imgproc/imgproc.hpp>
using namespace cv;
using namespace std;
int main()
{
//读入图像
Mat image = imread("..\\dog.png");
if (image.empty())
{
return -1;
cout << "未找到图像" << endl;
}
cv::Mat resultimage(image.size(), image.type());
cv::Mat xmapimage(image.size(), CV_32FC1);
cv::Mat ymapimage(image.size(), CV_32FC1);
int rows = image.rows;
int cols = image.cols;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
xmapimage.at<float>(i, j) = cols - j;
ymapimage.at<float>(i, j) = rows - i;
}
remap(image, resultimage, xmapimage, ymapimage, CV_INTER_LINEAR,
cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));
cv::imshow("image", image);
cv::imshow("resultimage", resultimage);
}
waitKey(0);
return 0;
}
重映射函数
remap(image, resultimage, xmapimage, ymapimage, CV_INTER_LINEAR,
cv::BORDER_CONSTANT, cv::Scalar(0, 0, 0));
前两项分别代表输入和输出图像,之后两项代表x,y坐标,
插值方法、边界插值类型、插值数值
今天先到这,明天继续