上位机图像处理和嵌入式模块部署(qt图像处理)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】

        很多人一想到图像处理,本能的第一反应就是opencv,这也没有错。但是呢,这里面还是有一个问题的,不知道大家有没有想过,如果我们为了降低成本,需要把图像放到mcu来处理,这个时候应该怎么做呢?都知道,mcu的ram和flash都是有限的,根本无法容纳那么大的opencv库。所以,这边还是建议大家,opencv是可以用,但是基础的算法库最好还是可以自己写出来。

        对于写算法的人来说,最麻烦的事情,莫过于图片的读取和保存了,算法本身一般并不是那么复杂。所以这部分好在qt已经帮我们做了一部分,我们直接拿QImage类就可以实现基础的算法编写了。

1、相关类

        qt里面的QImage十分方便,输入路径,就是实现图片的保存和加载。

2、参考代码

        如下面代码所示,这就是一个简单的图像处理代码,将原来的彩色图片,变成了灰色图片。整个应用没有界面,就是一个单纯的应用。所有的操作都放在了processImage函数里面。

#include 
#include 

void processImage(QString inputPath, QString outputPath) 
{
	// load image
	QImage inputImage(inputPath);
	if (inputImage.isNull()) 
	{
		qDebug() << "Failed to load image";
		return;
	}

	// get image infor
	int width = inputImage.width();
	int height = inputImage.height();

	// loop to process pixel
	for (int y = 0; y < height; ++y) 
	{
		for (int x = 0; x < width; ++x) 
		{
			QRgb pixel = inputImage.pixel(x, y);

			// get data
			int red = qRed(pixel);
			int green = qGreen(pixel);
			int blue = qBlue(pixel);

			// get gray
			int gray = qGray(red, green, blue);

			// set gray
			inputImage.setPixel(x, y, qRgb(gray, gray, gray));
		}
	}

	// save data
	if (!inputImage.save(outputPath)) 
	{
		qDebug() << "Failed to save processed image";
	}
}

int main() 
{
	// set input and output path
	QString inputPath = "D:/lena.png";
	QString outputPath = "D:/lena_new.png";

	// process image
	processImage(inputPath, outputPath);
	return 0;
}

        代码中因为还涉及到调试的部分,所以除了QImage之外,还需要把QDebug头文件包括进来。首先用QImage导入路径,判断是否为空,不为空则继续处理。接着获取图片的宽度和高度,依次获取图片的每个像素QRgb。读取到r、g、b之后,就可以通过qGray计算出对应的灰度值gray,这样最基本的算法就写好了。计算出来的gray通过setPixel保存在inputImage当中,并且在所有操作都完成之后,save到新的路径下面,这样图像处理就算是ok了。

3、实验和总结

        记得读书的时候,有一门《数字图像处理》的课程。老师们为了方便同学们快速学习算法,很多图片的加载和读取工作,老师们会自己写一个动态库帮忙完成。现在有了QImage之后,无疑是更方便了。对于基础的算法,大家还是最好自己可以写出来、调试出来。

        对于这个应用,大家先看一下能不能编译出来。编译出来之后,还要准备一张lena.png的图片,可以从这个地方下载,

https://github.com/mikolalysenko/lena/blob/master/lena.png

        接着启动应用,开始单步调试,如果没啥问题,应该就可以在D盘看到生成的新图片,打开看一下,如果发现是灰度图,那基本代表没有什么问题了。

上位机图像处理和嵌入式模块部署(qt图像处理)_第1张图片

你可能感兴趣的:(上位机图像处理和嵌入式模块部署,图像处理,人工智能)