2014-03-26 21:19:49 Linoi 阅读数 3934

专栏地址:http://blog.csdn.net/column/details/imagep.html

本系列博客主要记录Image_Lin图像处理软件的开发记录。

Image_Lin软件计划实现的功能包括:

(一)、基本图像处理(黑白、锐化、柔化、补光)

(二)、人像美容(人脸美肤)

(三)、图像特效(素描、油画、浮雕、怀旧、Lomo)

(四)、图像去雾

Image_Lin图像处理的开发工具是:QT+OpenCV


这一篇博客我主要对QT和OpenCV进行一个简单的介绍。


QT是一个跨平台的C++图形用户界面应用程序框架,首度为公众可用是在1995年5月。它最初由Haavard Nord和Eirik Chambe-Eng开发而成。当前最新的版本是Qt5.2,下载地址

一些关于QT的教程如下:

QT 编程基础入门到精通

Qt 学习之路 2

QT 学 习 

下面,我谈谈Qt的元对象系统

Qt的主要成就之一就是使用了一种机制对C++进行了扩展,并且使用这种机制创建了独立的软件组件。这些组件可以绑定在一起,但任何一个组件对于它所要连接的组件的情况事先一无所知。

这种机制称为元对象系统(meta-object system),它提供了关键的两项技术:信号-槽以及内省(introspection)。内省功能对于实现信号与槽是必需的,并且允许应用程序的开发人员在运行时获得有关QObject子类的“元信息”,包括一个含有对象的类名以及它所支持的信号和槽的列表。这一机制也支持属性和文本翻译,并且它也为QtScript模块奠定了基础。从Qt4.2开始,可以动态添加属性。

标准C++没有对Qt的元对象系统所需要的动态元信息提供支持。Qt通过提供一个独立的moc工具解决了这个问题,moc解析Q_OBJECT类的定义并且通过C++函数提供可供使用的信息。由于moc使用纯C++来实现它的所有功能,所以Qt的元对象系统可以在任意C++编译器上工作。

这一机制是这样工作的:

  • Q_OBJECT宏声明了在每一个QObject子类中必须实现的一些内省函数:metaObject()、tr()、qt_metacall(),以及其他一些函数。
  • Qt的moc工具生成了用于由Q_OBJECT声明的所有函数和所有信号的实现。
  • 像connect()和disconnect()这样的QObject的成员函数使用这些内省函数来完成它们的工作。


OpenCV是一个基于开源发行的跨平台计算机视觉库,它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

当前最新的版本是2.4.8,下载地址

一些入门教程:

OpenCV学习笔记:快速入门例程

OpenCV入门指南


更多图像处理、机器视觉资源请关注 博客:LinJM-机器视觉 微博:林建民-机器视觉

2014-03-31 20:38:17 Linoi 阅读数 6069

专栏地址:http://blog.csdn.net/column/details/imagep.html

这一篇文章主要谈谈美肤操作。这个功能基本上很多软件都有,比如美图秀秀,女生们的最爱。

美肤的原理,简单来说,其实就是图像平滑操作,不过在这个平滑的过程中最好不能把轮廓给模糊掉。美图秀秀美肤操作的技术没公开,我这里就只谈谈采用双边滤波器实现美肤的技术。

关于双边滤波器的相关资料,在我的博文:《双边滤波器解析与代码》有介绍,这里我也就不浪费时间多讲,想进一步了解的可以去里面看看。

先看看美图秀秀的美肤效果:


原图如下:


现在看咱们自己的Code:【很简单,想修改的同学可以参看文献[1]提供的PCL代码】

void MainWindow::on_actionBeauty_triggered()
{
    cv::Mat face;

    int KERNEL_SIZE = 31;
    for (int i = 1; i < KERNEL_SIZE; i = i + 2)
    {
        bilateralFilter(image,face,i,i*2,i/2);
    }
    cv::namedWindow("Beauty");
    cv::imshow("Beauty",face);
}

效果图:



更多图像处理、机器学习资料,请关注博客:LinJM-机器视觉  微博:林建民-机器视觉

2014-03-31 11:34:33 Linoi 阅读数 5279

专栏地址: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图像转换为黑白图像。

转换公式如下:

\text{RGB[A] to Gray:} \quad Y  \leftarrow 0.299  \cdot R + 0.587  \cdot G + 0.114  \cdot B


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-机器视觉微博:林建民-机器视觉

2005-04-28 22:19:00 persuper 阅读数 2595

    本系统的设计目标是开发一个从医学切片图像到有限元网格平台.当然这是导师的项目,不过系统架构和主要的编码还是由我作的.对这次开发过程中出现的问题以及最终解决问题的途径,我觉得还是比较有代表性的.

先介绍一下用户需求,其实就是导师脑袋里的想法结合我们的能力的东东了,编程技术不会太复杂,毕竟俺还是个学生,太复杂的东西是有风险的.

 1)将切片图像读取(以后还要增加读取三维图像),图像预处理(裁减,平滑),图像分割,三维重建,几何模型导出和有限元网格生成等功能模块有机结合在统一的用户界面下,提供简洁初始界面,使用户能轻松识别各个功能区。因为该软件面向对象是科研工作者的,所以都是采用英文界面(这里没有歧视非科技工作者的意识,这是导师的原话.我对该观点抱否定态度,但实话说英文注释和界面开发起来方便,至少不用考虑输入法切换和Unicode转换).

2)对从切片图像读取到有限元网格生成这样一系列功能的实现在具有流线型特征的同时应该是可回溯性。(这里的回溯性,是比较高级的东西.利用了ITK和VTK的管道机制.)

3)为了提高图像处理的效率,对裁减、分割、重建这样的主要功能,应该具有策略存取功能,从而实现自动化或半自动化。

4)实现不同分割或重建方法结果可视化比较。(学生可以使用该系统来实验各种分割算法,封装算法到该系统中;前提是对Itk的类结构有了解)

5)设计应该考虑界面功能模块的扩展和底层算法扩展。 


根据这样的目标,我们制定了系统的设计方案:

1)系统基于VC6.0+sp5.0开发,采用MFC + ITK + VTK结构完成程序的用户界面、图像处理和可视化机制。(移植到.Net的工作已经完成)

2)设计简约的系统界面,划分主要功能模块。功能模块主要包括数据处理模块、裁减模块、分割模块、分割过滤器模块、重建模块、表面模型平滑简化模块以及有限元网格划分模块等。

3)设计合理的数据流。实现各功能模块独立化,数据模块、处理模块和界面模块分离,提高系统的移植性。

4)在各功能模块之间可动态生成管道线。 
   等测试完毕,欢迎大家下载试用!

2019-01-27 11:25:26 qq_27131611 阅读数 420

基于Qt Creator 的Windows下数字图像处理软件[栏目]

前言

之前说准备转行软件开发,准备从C++的学习开始,恰好这学期的数字图像处理需要做一个项目,所以决定用QT C++来完成此次的项目设计,由于前期时间关系,没有及时更新,现在项目基本完成,准备写一个栏目的文章来与和我一样自学的小白分享一些Qt Creator、C++的知识,对这个项目进行总结的同时也希望能让看到这个栏目博客的朋友少走一些弯路。
在后面的项目介绍中会对使用到的一些控件以及C++语法做详细的解释,同时同步更新相对应的完整工程文件。

设计过程

设计过程在后面连载的博客中按逻辑功能讲解,下一篇:Qt C++:综合数字图像处理平台–登录界面设计。
请期待…

完整项目展示

经过大半个学期的努力,现学现用,总算撸出来了一个相对完善的综合数字图像处理平台(至于为什么是教学模块,后面再说),界面设计耗费很多精力,毕竟小白,对控件使用不熟悉。
话不多说,直接上图。

图像处理行业入门

阅读数 440

没有更多推荐了,返回首页