C++进行简单的图像处理

这篇具有很好参考价值的文章主要介绍了C++进行简单的图像处理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

前言

一、读取,显示和保存

二、图像变换

1.显示灰度图

2.显示HSV图

3.高斯模糊

4.图片缩放

三、遍历图像


前言

本文中介绍了用opencv处理图像的一些简单方法,并给出了代码。

一、读取,显示和保存

#include<opencv2/imgcodecs.hpp>
#include<opencv2/highgui.hpp>
#include<opencv2/imgproc.hpp>
#include<opencv2/opencv.hpp>
#include<iostream>
#include <string>
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)的作用是令窗口一直显示当前图像。  

         显示效果如下:

C++进行简单的图像处理

二、图像变换

1.显示灰度图

        cvtcolor是opencv给出的图像变换函数,括号中第一个参数为需要变换的图像,第二个参数为变换之后的图像,第三个参数为变换的方式。下列代码中第三个参数为COLOR_BGR2GRAY,即将BGR图像转换为灰度图。

//显示灰度图
cvtColor(image, image_gray, COLOR_BGR2GRAY);//将图片转换为灰度图
imshow("test_gray", image_gray);//显示灰度图

        显示效果如下:

C++进行简单的图像处理

2.显示HSV图

        HSV是图像处理中常用的色彩空间,HSV分别指的是色相/饱和度/明度(Hue, Saturation, Value)。与转换为灰度图相近,代码如下:

//转换为HSV
cvtColor(image, image_gray, COLOR_BGR2HSV);//将图片转换为HSV图
imshow("test_HSV", image_gray);//显示HSV图

        显示效果如下:

C++进行简单的图像处理

3.高斯模糊

        对于高斯模糊(高斯平滑)此处不再赘述。下列代码中的size(9,9)是高斯内核的大小,宽和高可以不一致,但需要都是正奇数 。代码如下:

//高斯模糊
GaussianBlur(image, imgBlur, Size(9, 9), 3, 0);
imshow("test_Blur",imgBlur);//显示高斯模糊图

        显示效果如下: 

C++进行简单的图像处理

4.图片缩放

        使用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);//显示缩放后的图

         两种方法的显示效果如下:

C++进行简单的图像处理

        原图的大小为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<cv::Vec3b>(r, c);
		bgr[1] = 0;
	}
imshow("test_1=0",image);

        上述代码将图像中每一个像素点内的第二位数置为0,效果如下: 

C++进行简单的图像处理

         访问图像数据的方法有很多,还可以用指针的方法进行访问。文章来源地址https://www.toymoban.com/news/detail-501799.html

到了这里,关于C++进行简单的图像处理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包