基于C++的opcv学习笔记

图像的基础操作

图像加载

IMREAD_UNCHANGED 加载原图,不做任何改变

输入图像默认读进来的方式RGB,但是三个通道的排序是BGR

IMREAD_GRAYSCALE 把原图加载为灰度图

IMREAD_COLOR 把原图作为RGB图像加载进来

1
Mat src = imread("E:/OpenCV/testimage/test.png", IMREAD_GRAYSCALE); //载入灰度图像

判断图像是否为的方法:

  1. !src.data == true //数据为空值 = true
  2. src.empty() == true // 判断空值函数

图像显示

1
2
namedWindow("test opencv setup", WINDOW_AUTOSIZE); //创建窗口,自动大小
imshow("test opencv setup", src); //窗口名,图像名

CV_WINDOW_AUTOSIZE 会自动根据图像大小,显示窗口大小,不能人为改变窗口大小 ## 色彩空间转换

1
2
3
4
5
cvtColor( image, gray_image, COLOR_BGR2GRAY );
namedWindow("output windows", CV_WINDOW_AUTOSIZE);
Mat output_image;
cvtColor(src, output_image, CV_BGR2HLS); //修改图像为某色彩空间
imshow("output windows", output_image);
COLOR_BGR2HLS // BGR 空间转为 亮度饱和度通道

COLOR_BGR2GRAY // BGR 空间转为 灰度

保存

1
imwrite("E:/my.tif",output_image); //保存位置,要保存的图片

矩阵的掩膜操作

核心公式:

\(I(i,j) = 5 * I(i,j)-[I(i-1,j)+I(i,j-1)+I(i+1,j)+I(i,j+1)]\)

基本的操作API

获取图像像素指针

  • CV_Assert(myImage.depth() == CV_8U);

  • Mat.ptr(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。

  • 获得当前行指针const uchar* current= myImage.ptr(row );

  • 获取当前像素点P(row, col)的像素值 p(row, col) =current[col]

像素范围处理saturate_cast

  • saturate_cast(-100),返回 0。

  • saturate_cast(288),返回255

  • saturate_cast(100),返回100

  • 这个函数的功能是确保RGB值得范围在0~255之间