目录
前言
一、读取,显示和保存
二、图像变换
1.显示灰度图
2.显示HSV图
3.高斯模糊
4.图片缩放
三、遍历图像
本文中介绍了用opencv处理图像的一些简单方法,并给出了代码。
#include
#include
#include
#include
#include
#include
using namespace cv;
using namespace std;
int main() {
String str = "E:/photo/1.jpg"; // 文件路径
Mat image = imread(str);//读取图像
Mat image_gray;
Mat imgBlur;
imshow("test_BGR", image);//显示原图
imwrite("E:/photo/2.jpg", image);//保存图像
waitKey(0);
return 0;
}
waitKey(0)的作用是令窗口一直显示当前图像。
显示效果如下:
cvtcolor是opencv给出的图像变换函数,括号中第一个参数为需要变换的图像,第二个参数为变换之后的图像,第三个参数为变换的方式。下列代码中第三个参数为COLOR_BGR2GRAY,即将BGR图像转换为灰度图。
//显示灰度图
cvtColor(image, image_gray, COLOR_BGR2GRAY);//将图片转换为灰度图
imshow("test_gray", image_gray);//显示灰度图
显示效果如下:
HSV是图像处理中常用的色彩空间,HSV分别指的是色相/饱和度/明度(Hue, Saturation, Value)。与转换为灰度图相近,代码如下:
//转换为HSV
cvtColor(image, image_gray, COLOR_BGR2HSV);//将图片转换为HSV图
imshow("test_HSV", image_gray);//显示HSV图
显示效果如下:
对于高斯模糊(高斯平滑)此处不再赘述。下列代码中的size(9,9)是高斯内核的大小,宽和高可以不一致,但需要都是正奇数 。代码如下:
//高斯模糊
GaussianBlur(image, imgBlur, Size(9, 9), 3, 0);
imshow("test_Blur",imgBlur);//显示高斯模糊图
显示效果如下:
使用resize函数对图像进行缩放有两种方式。一种是按照比例对图像进行缩放,另一种是按照自定义的大小对图像进行缩放。
第一种,按照比例将图像的长宽均缩放到原来的0.5倍,代码如下:
//按比例调整图像大小
resize(image, image_resize_ratio, Size(), 0.5, 0.5);
imshow("test_resize_ratio", image_resize_ratio);//显示缩放后的图
第二种,按照自定义的大小将图像缩放600x600,代码如下:
//自定义调整图像大小
resize(image, image_resize, Size(600,600));
imshow("test_resize", image_resize);//显示缩放后的图
两种方法的显示效果如下:
原图的大小为800x800,所以第一种方法缩放之后的大小为400x400,上图中最左侧为原图。
这里仅展示一种较为简单的方法:用opencv的at成员函数访问图像数据,代码如下:
//遍历图像
for (size_t r = 0; r < image.rows; r++)//行
for (size_t c = 0; c < image.cols; c++)//列
{
cv::Vec3b& bgr = image.at(r, c);
bgr[1] = 0;
}
imshow("test_1=0",image);
上述代码将图像中每一个像素点内的第二位数置为0,效果如下:
访问图像数据的方法有很多,还可以用指针的方法进行访问。