图像处理 开发_图像处理开发 - CSDN
精华内容
参与话题
  • 关于玩WP 8.1开发所使用的VS版本问题。对版本的要求是2013的Update2,这是最低要求,只要是这个版本或以上都可以,而update3,update4,update5是不是必须更新呢?不是的,VS的update是可选的,而且每个update都会...

    在今天的吹牛节目开始之前,先交代一件事:

    关于玩WP 8.1开发所使用的VS版本问题。对版本的要求是2013的Update2,这是最低要求,只要是这个版本或以上都可以,而update3,update4,update5是不是必须更新呢?不是的,VS的update是可选的,而且每个update都会累积,所以,update越多,安装包的体积越大。因此,WP开发我们只需update2就行了,我用的也是u2。如果你觉得MSDN原版不好下,可以从下面的地址下,我已经把相关的.iso上传到115。这里面是旗舰版。

    开发工具
    115网盘礼包码:5lbblgv09y6k
    http://115.com/lb/5lbblgv09y6k

    如果你还没有安装VS,我这里分享一个小技巧。就是在安装时,不要勾选Windows Phone 8.0 SDK,安装后就没有8.0的模拟器和镜像,也不能开发8.0的应用,只能开发8.1的,而且只能用真机调试。

    安装后,你再下载我上面分享的另一个.iso——windowsphone81sdkupdate1.iso,这里不仅包含8.1的SDK,还带了8.1 Update 1的模拟器,即有“小娜”的版本。

    如此一来,你只安装了最新的8.1模拟器,而没有8.0的模拟器了。当然如果你要开发8.0的应用,就要安装Windows Phone 8.0 SDK,我上面说的当你只开发8.1应用的时候用的。

    =======================================================

     

    好了,吹牛节目正式开始,由于剧组缺钱,本节目的主持人只有老周一人,没有后台工作人员,有点像关老爷单刀赴会的感觉。今天咱们吹一下如何进行图像处理,比如怎么把图片变成灰度、反色、黑色等。

    老周不是专业搞图像的,老周是打酱油专业毕业的,所以老周不懂相关的知识,但不要紧,只要我们好好利用现有的API,也可以对图像进行一些非专业性处理。我们可以不明白图像文件的具体结构,只要懂得如何改写像素数据就行了。

    要弄清楚像素数据是如何排列的,首先要简单理解一下常见的像素格式是啥样的。这些格式由Windows.Graphics.Imaging.BitmapPixelFormat枚举定义,Unknown成员不管它,我们只关心另外三个。

    Bgra8——最后面的8表示8位,即每个颜色值占8位,也就是1字符,bgra,第一个字节表示B(蓝)的值,第二个字节表示G(绿)的值,第三个字节表示R(红)的值,第四个字节表示A(不透明度)的值。举个例子,假设有一个图片里面有四个像素,宽为2,高为2,即两行两列。结构如下表所示:

    R = 100

    G = 0

    B = 200

    A = 255

    R = 255

    G = 50

    B = 32

    A = 255

    R = 12

    G = 30

    B = 90

    A = 255

    R = 120

    G = 60

    B = 75

    A = 255

     像素数据是一个字符数组,比如上面的2*2的图像,转换为像素数据为:

    {
       200, 0, 100, 255,   32, 50, 255, 255   ……  75, 64, 120, 255
    }

    因为像素格式为bgra,所以排第一的是B的值,接着是G,然后是R,最后是A,也就是说,每四个字节表示一个像素点,上述例子中,图像有四个像素点,每个点由4个字节表示,所以整个图像的像素数据共4*4=16字节。

    字节的排列就是按像素点顺序排放的,从左到右,从上到下,先排完第一行,再排第二行,第三行……一直排到最后一个像素点。

     

    Rgba8……和上面的一样,每个颜色值占一个字节,只是排列时顺序不同,rgba是最常用的,因为这样排列图像不会偏色,即第一个字节是R,第二个字节是G,第三个字节是B,最后是A。这个RGB的通道不同顺序产生的不同效果,大家可以在PS里面查看,PS中“图层”窗口中有个“通道”面板,那里可以看到各个通道的效果。

     

    Rgba16——和上面一样,排列顺序也是R -> G -> B -> A,但是,rgba16中每个色值为16位,即占用2个字节。在像素数据中,第一个和第二个字节共同表示R值;第三个,第四个字节共同表示G的值;第五个第六个字节为B的值,第七、八个字节表示A。这个模式很少用,因为不太好套公式,呵呵。

     

    理论知识还是抽象的,咱们来干点实事吧。下面老周给大家演示两个比较简单的处理——灰度 和 反色。

    图像处理的各种方法大家可以查书,可以网上查,反正都有固定公式的。

     

    1、灰度处理。

    这里我选用平均法,即把每个像素点中R,G,B三个值进行相加,然后除以3,再把这个平均后的值替换原来的R,G,B值,A是不透明度,一般可以不管它,生成新的像素数据值时A值就用原图的A值就行了,主要是针对RGB进行计算。代码如下:

            /// <summary>
            /// 灰度处理
            /// </summary>
            private byte[] GrayScale(byte[] rgbaBuff)
            {
                byte[] resbytes = new byte[rgbaBuff.Length];
                for (int i = 0; i < rgbaBuff.Length; i += 4)
                {
                    byte r = rgbaBuff[i];
                    byte g = rgbaBuff[i + 1];
                    byte b = rgbaBuff[i + 2];
                    byte a = rgbaBuff[i + 3];
                    // 使用平均法
                    byte ev = Convert.ToByte((Convert.ToDouble(r) + Convert.ToDouble(g) + Convert.ToDouble(b)) / 3d);
                    // 生成新的像素值
                    resbytes[i] = resbytes[i + 1] = resbytes[i + 2] = ev;
                    resbytes[i + 3] = a;
                }
                return resbytes;
            }


    我的示例都是用rgba8格式的,每个像素点需要4个字节,所以在for循环中,i的境量不是i++,而是i += 4,即每次循环跳4个字节,这样才能保证每一轮循环都访问一个像素点。

     

    2、反色。

    反色最简单,分别用255去減RGB三个值就行了,即

    newR = 255 - oldR, newG= 255 - oldG, newB= 255-oldB

            /// <summary>
            /// 反色
            /// </summary>
            private byte[] InvertPixels(byte[] rgbaBuff)
            {
                byte[] res = new byte[rgbaBuff.Length];
                for (int i = 0; i < rgbaBuff.Length; i += 4)
                {
                    byte r = rgbaBuff[i];
                    byte g = rgbaBuff[i + 1];
                    byte b = rgbaBuff[i + 2];
                    byte a = rgbaBuff[i + 3];
                    // 反色就是用255分别减去R,G,B的值
                    res[i] = (byte)(255 - r);
                    res[i + 1] = (byte)(255 - g);
                    res[i + 2] = (byte)(255 - b);
                    res[i + 3] = a;
                }
                return res;
            }

     

    3、获取源图像的像素数据。

    要得到源图像的像素数据,需要先对图像进行解码,这个应该很多观众都会,就是用Windows.Graphics.Imaging.BitmapDecoder类来解码。

    我建议大家通过帧来获取单帧图像的像素数据,一般来说,静态图片只有一帧,所以调用BitmapDecoder实例的GetFrameAsync(0)方法就能得到第一帧的图像,由BitmapFrame类封装,再通过BitmapFrame实例的GetPixelDataAsync方法得到一个PixelDataProvider实例,再访问PixelDataProvider实例的DetachPixelData方法就能得到表示像素数据的字节数组。

            enum OperType { Gray, Invert };
    
            private async Task<BitmapSource> ImageToProcAsync(IRandomAccessStream inputStream, OperType opt)
            {
                BitmapDecoder decoder = await BitmapDecoder.CreateAsync(BitmapDecoder.JpegDecoderId, inputStream);
                // 获取第一帧
                BitmapFrame frame = await decoder.GetFrameAsync(0);
                // 获取像素数据
                PixelDataProvider pixprd = await frame.GetPixelDataAsync(BitmapPixelFormat.Rgba8, BitmapAlphaMode.Straight, new BitmapTransform(), ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage);
                byte[] data = pixprd.DetachPixelData();
                // 处理
                byte[] returnData = null;
                if (opt == OperType.Gray)
                {
                    returnData = GrayScale(data);
                }
                else
                {
                    returnData = InvertPixels(data);
                }
                // 创建新的位图对象
                WriteableBitmap wb = new WriteableBitmap((int)frame.PixelWidth, (int)frame.PixelHeight);
                // 复制数据
                returnData.CopyTo(wb.PixelBuffer);
                return wb;
            }

    OperType是自定义枚举,Gray表示灰度处理,Invert表示反色处理。

     

    最后,请各位观众一起看看效果吧。

         

     

    各位观众,感谢您收看由火星电视台转播的老周吹牛节目,本集示例的源代码稍后给出下载地址。Thank you.

    示例下载:http://files.cnblogs.com/tcjiaan/imgProcSampleApp.zip

    欢迎下个世纪同一时间,准时收看老周吹牛特别节目。本节目由火星移动有限公司独家赞助。

    88。

     

    展开全文
  • 本系列博客主要记录Image_Lin图像处理软件的开发记录。 Image_Lin软件计划实现的功能包括: (一)、基本图像处理(黑白、锐化、柔化、补光) (二)、人像美容(人脸美肤) (三)、图像特效(素描、油画、浮雕、...

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

    展开全文
  • C++数字图像处理—搭建开发环境

    千次阅读 2020-03-08 11:51:05
    “工欲善其事必先利其器”,使用一个优好的开发环境,能够快速入门。

        “工欲善其事,必先利其器”,使用一个友好的开发环境,能够快速入门。在这个系列博文当中,我们使用OpenCV作为底层库,主要是用来图像的输入和输出,以及算法正确性的验证;开发语言为C++,编码环境为Visual Studio 2013。

    1、Visual Studio 2013下载与安装

        官方下载网址Visual Studio 2013下载。下载完成之后,正常安装。按照微软套路,是需要破解,这个大家自行百度吧。网上资料一大片。

    2、OpenCV下载与安装

    (1)、简介

        OpenCV于1999年由Intel建立,如今由Willow Garage提供支持。OpenCV是一个基于BSD许可 (开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效—由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。——来源于百度百科-OpenCV

    (2)、下载与安装

        OpenCV官方下载地址OpenCV下载,在这个系列的博文当中,我们将使用OpenCV3.0-32位版本。下载完成后,正常安装即可。

    (3)、OpenCV环境配置

        OpenCV提供动态库(.dll)和静态库(.lib)两种配置,在这里我们介绍动态库配置的方式。官网以及各位CV网友提供了大量的OpenCV的配置教程,我们发现好多网友都是使用全局配置OpenCV路径,一次配置完成后,无需重复配置,一劳永逸。但是,在实际开发当中,我们发现这样的配置方式,会带来源码移植麻烦、库冲突(新旧版本同时存在)的情况。在这里,教大家一种便于工程移动的配置方法(本人工作当中,经常需要将算法源码移交给嵌入式开发的同事)。

    step1、制作最小OpenCV库

        新建文件夹【minOpenCV3.0-32】,打开刚刚我们安装OpenCV的目录,将E:\soft\opencv3.0\build\下的【include】文件夹、E:\soft\opencv3.0\build\x86下的【VC12】文件夹拷贝至【minOpenCV3.0】。

    step2、新建VS工程

        新建一个简单的控制台程序即可,实际上,开发算法大部分情况是在控制程序中(本人做界面实在是丑,丑,你懂吗?)。将step1中制作的【minOpenCV3.0-32】文件夹,拷贝至工程文件所在目录。

    step3、配置头文件

        【项目】->【属性】->【配置属性】->【VC++目录】->【包含目录】,添加路径:

    ..\minOpenCV3.0-32\include

    step4、配置库文件

     

    【项目】->【属性】->【配置属性】->【VC++目录】->【库目录】,添加路径:

    ..\minOpenCV3.0-32\vc12\lib

    【项目】->【属性】->【配置属性】->【链接器】->【输入】->【附加依赖项】,添加文件名:

    opencv_world300d.lib

    step5、复制dll文件

        将【minOpenCV3.0-32】->【VC12】->【bin】下的

    opencv_world300d.dll

    文件拷贝到VS工程的Debug目录(输出目录)。

    3、环境测试、注意事项

        (1)、测试

        在main函数中编码,测试结果如下:

    (2)、注意事项

     

    • 博文中OpenCV的配置方式是对工程单独配置,所以,每次新建立工程都需要重新配置(不要怕麻烦,比起移植、库冲突的奇葩错误,这样做值)。
    • release模式下配置,方法一致,只是将库文件、dll文件中的字符【d】去掉。
    • 注意VS版本与VC运行库一致。

    技术交流合作QQ:3355138068

    展开全文
  • 图像处理入门教程

    万次阅读 多人点赞 2017-10-09 12:52:10
    最近有人问我图像处理怎么研究,怎么入门,怎么应用,我竟一时语塞。仔细想想,自己也搞了两年图像方面的研究,做个两个创新项目,发过两篇论文,也算是有点心得,于是总结总结和大家分享,希望能对大家有所帮助。在...
  • 基于Visual C++开发 左飞 万晋森 刘航 著 ISBN 978-7-121- 12776-2 2011年4月出版 定价:89.00元(含光盘1张) 16开 652 页 宣传语 《Visual C++数字图像处理开发入门...
  • ——图像的两种分类: 位图 例子:单色位图(只有两种颜色(黑白),每一个像素点占一位) 256位图(每一个像素点有256个颜色,每一个像素点需要占一个字节) 24位位图(每个像素点占3个字节) 位图图像(bitmap)...
  • Java图像处理方面的工具库和开发

    万次阅读 2017-02-06 10:59:39
    Java图像处理类库Java Image Filters Java Image Filters 是由 Jhlabs 开发的一组用来处理 Java 图像的类库,提供各种常用的图像处理效果,例如反转色、扭曲、水波纹、凹凸、黑白效果等等数十种效果,如...
  • 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注! 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",...
  • 图像处理】图像算法开发过程

    千次阅读 2015-12-16 22:33:57
    图像算法开发跟普通程序的软件算法开发又不一样,图像算法主要是关注如何对图像进行处理,也就是关注的优化的对象不一样。图像算法开发过程,一般是: 1)在PC端进行算法验证,达到所要实现的功能。 2)算法移植到...
  • 十个Python图像处理工具

    千次阅读 2019-04-01 16:14:39
    这些Python库提供了一种简单直观的方法来转换图像并理解底层数据。 今天的世界充满了数据,图像是这些数据的重要组成部分。但是,在使用它们之前,必须...Python是这些图像处理任务的绝佳选择,因为它作为一种科学...
  • 随着科技的发展,各个领域对图像处理要求越来越高,算法也越来越复杂,处理时间也会延长。在大数据时代,图片数量不可计数,想在较短时间内处理完相应数量的图片则需要使用大数据技术。本文则利用Hadoop与OpenCV搭建...
  • 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注! 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",...
  • 本系统的设计目标是开发一个从医学切片图像到有限元网格平台.当然这是导师的项目,不过系统架构和主要的编码还是由我作的.对这次开发过程中出现的问题以及最终解决问题的途径,我觉得还是比较有代表性的.先介绍一下...
  • OpenCV与MFC通用型图像处理开发实践

    千次阅读 2015-08-04 10:07:58
    imagehandler   该程序的起源说来话长,它起源自上课的一次作业,后来又由于接触了OpenCV这个开源库,我就试图将OpenCV和MFC搓到一块,毕竟微软近来在界面上也下了狠功夫,尤其是Windows 7大获成功,而WP7.5和Windows 8...
  • 前一段时间接触了一个项目,主要是开发一个PC客户端,实现DICOM格式的医学影像的浏览和一些简单的处理,因此了解了一些医学影像方面的东西,分享出来供大家参考. 背景介绍PACS系统PACS系统是Picture Archiving and ...
  • 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",并关注! 图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号"qxsf321",...
  • 浅谈图像处理方向的就业前景[转) 最近版上有不少人在讨论图像处理的就业方向,似乎大部分都持悲观的态度。我想结合我今年找工作的经验谈谈我的看法。 就我看来,个人觉得图像处理的就业还是不错的。首先可以把...
  • 基于Qt的图像处理技术和算法

    万次阅读 多人点赞 2014-11-19 17:09:17
    原文链接: http://developer.nokia.com/community/wiki/Image_editing_techniques_and_algorithms_using_Qt
  • Python中的十大图像处理工具

    千次阅读 2019-06-17 15:36:33
    文章发布于公号【数智物语】(ID:decision_engine),关注...本文主要介绍了一些简单易懂最常用的 Python 图像处理库。 当今世界充满了各种数据,而图像是其中高的重要组成部分。然而,若想其有所应用,我们需要...
1 2 3 4 5 ... 20
收藏数 238,195
精华内容 95,278
关键字:

图像处理 开发