专栏地址:http://blog.csdn.net/column/details/imagep.html
本篇博客主要记录Image图像处理软件的基本图像处理,包括黑白图像、图像柔化、图像锐化。
图像黑白化
现在我们得到的大多数图像都是彩色图像,那么如果想要把它变成黑白图像,该怎么操作呢?
一个简单的方法就是——利用cvtColor实现。
cvtColor的原型如下:
C++: void cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0 )
在cvtColor中利用CV_BGR2GRAY, CV_RGB2GRAY就可以实现从RGB图像转换为黑白图像。
转换公式如下:
Code:
void MainWindow::on_actionBlackWhite_triggered() { cv::Mat bw; cv::cvtColor(image,bw,CV_BGR2GRAY); QImage bimg = QImage((const uchar*)(bw.data),bw.cols,bw.rows,QImage::Format_Indexed8); ui->Imagedisplaylabel->setPixmap(QPixmap::fromImage(bimg)); //ui->Imagedisplaylabel->setScaledContents(true); //ui->Imagedisplaylabel->resize(ui->Imagedisplaylabel->width(),ui->Imagedisplaylabel->height()); }
Example:
References:
彩色空间及cvtColor解析
图像柔化
图像柔化其实也就是图像模糊(平滑),算是一个非常简单的操作。
Code:
void MainWindow::on_actionSmooth_triggered() { cv::Mat Smooth; cv::namedWindow("Ori"); cv::imshow("Ori",image); cv::GaussianBlur(image,Smooth,cv::Size(5,5),5); cv::namedWindow("S"); cv::imshow("S",Smooth); }
Example:
图像锐化
所谓图像锐化就是要突出图像的边缘信息,加强图像的轮廓特征,以便于人眼的识别。图像锐化是与图像平滑相反的一类处理。它主要分为:空域处理方法和频域处理方法。这里要讲的是类似Photoshop的unsharpe mask锐化,从概念上讲,unsharpe mask就是首先从原图上生成一个模糊拷贝,用原图减去这个拷贝,得到原图的边界,类似于经过一次高斯过滤查找到图像的边界。这个图像边界就是我们需要的mask。
整个锐化过程如下所示:
(上图改进方案见文献Image Enhancement via Adaptive Unsharp Masking)
一个简单的实例:
Code:
void MainWindow::on_actionSharpe_triggered() { cv::namedWindow("ori_s"); cv::imshow("ori_s",image); cv::Mat sharpe; cv::GaussianBlur(image,sharpe,cv::Size(5,5),5); cv::addWeighted(image,1.5,sharpe,-0.6,0,sharpe); cv::namedWindow("sharpe"); cv::imshow("sharpe",sharpe); }
Example:
References:
SHARPENING: UNSHARP MASK
GUIDE TO IMAGE SHARPENING
Unsharp masking[Wikipedia]
利用unsharp mask锐化图像
更多图像处理资源,请关注博客:LinJM-机器视觉微博:林建民-机器视觉