Marco 发表于 2016-9-22 16:13:13

LeadTools图像处理(二)之获取,操作图像像素

本帖最后由 Marco 于 2016-9-27 16:27 编辑

在前面的文章中,已经了解到LeadTools是如何加载与显示图像。这篇文章中,主要想和大家分享下LeadTools是如何获取图像的像素值,并对其加以操作的。提到图像的像素值,首先想在这里说明下图像的位深。我们经常说到8bit图像,也就是说一个像素是8bit, 只有一个值(0-255)。对于RGB图像来说,是一幅24bit图像,每一个像素上有三个值,分别是R,G,B三种颜色的分量。LeadTools提供了如下这个函数用于获取图像上的像素值:Data=Image.GetPixelData(Row, Column);其中Data 是一个byte类型的数组,image是加载的图像,Row ,Column分别代表图像的行与列。即通过GetPixelData这个函数可以获取到图像上Row行,Column列这一点的像素值。如果图像是8bit图像则Data即为一个长度为1 的数组,如果图像是RGB图像,则Data是一个长度为3的数组,分别存放着R,G,B三个颜色的分量。同时,LeadTools也提供了改变图像上某点像素值的函数:Image.SetPixelData(Row, Column, Data)即将Image 图像上Row行,Column列这一点的像素值变成Data
关于这两个函数的具体使用情况可以参照官方文档,链接如下:https://www.leadtools.com/help/leadtools/v19/dh/to/webframe.html?platform=dotnet具体在Image Features——Image Processing——Manipulating Bitmap Data.在了解了这两个函数之后,我们便可对图像的像素值进行操作。如下图像所示,一张纯白的背景上有一个黑色的圆圈。下面这个demo实现的就是将背景变为黑色,圆圈变为白色。
这个Demo是在教程(一)的代码基础上继续改进的,所以之前的配置设置就不在这里详细描述。具体步骤如下:1.在Form1设计模式中,再添加一个button控件,ImageViewer控件分别改名为change,theViewer2.这样就有了两个按钮,两个显示控件。其中第一个按钮用于载入原始图片,显示原始图片。第二个按钮用于处理原始图片,显示处理之后的图片。2.切换到From1代码模式,在using之后,添加如下代码(添加之前还是要先添加引用,具体见教程一)。using Leadtools.ImageProcessing;
using Leadtools.ImageProcessing.Core;
using Leadtools.Drawing;
using Leadtools.Dicom;
3.在Public Form1()中添加如下代码: RasterImageViewer theViewer2;
            theViewer2 = new RasterImageViewer();4.在public partial class Form1 : Form 这个类中,重新定义图形变量,并将教程一中button1.click()事件中的该变量删除RasterImage Image;5.切换回到Form1设计页面,双击button2则代码页面会出现button2.click()事件,在该事件中添加如下代码://创建一个与image 大小,位深相同的图像在内存中用于存储处理之后的图像
            RasterImage destImage = new RasterImage(
                   RasterMemoryFlags.Conventional,
                   Image.Width,
                   Image.Height,
                   Image.BitsPerPixel,
                   Image.Order,
                   Image.ViewPerspective,
                   Image.GetPalette(),
                   IntPtr.Zero,
                   0);
            byte[] Data;
      
            //改变背景与圆圈颜色
         // 判断图像是否为24bit图像
            if (Image.BitsPerPixel == 24)
            {
                Image.Access();
                //遍历图像上每一点像素
                for (int i = 0; i < Image.Height; i++)
                {
                  for (int j = 0; j < Image.Width; j++)
                  {
                        Data = Image.GetPixelData(i, j);
                        //若该店像素值三个分量均为0则说明是黑色,将该点像素值三个分量均变为255(白色)
                        if (Data == 0 && Data == 0 && Data == 0)
                        {
                            Data = 255;
                            Data = 255;
                            Data = 255;
                        }
                        else //if(Data ==255 && Data ==255 && Data == 255)
                        {
                            Data = 0;
                            Data = 0;
                            Data = 0;
                        }
                        //将新像素值赋予图像
                        destImage.SetPixelData(i, j, Data);
                  }

                }
            }
   //显示图像
   theViewer2.Image = destImage;关于RasterImage 的详细信息,大家可以参照官网文档,可在文档中直接搜索RasterImage.


6.生成解决方案,并运行程序。显示结果如下:在成功地操作了图像的像素之后,也可以通过该方法将RGB图像转换成灰度图像。灰度图像即将RGB图像上某一点像素值的R,G,B分量按照一定的权重计算出一个新的值,将该值分别赋予R,G,B 三个分量。也就是说灰度图像的每一个像素虽然也有三个分量,但每一个分量的值是相同的。具体操作如下:1.将之前button2.click()事件中改变图像背景圆圈颜色之后的代码替换如下:
            //彩色图像转灰度图像
            //遍历图像每一个像素
            byte pixel;
            for (int i = 0; i < Image.Height; i++)
            {
                for (int j = 0; j < Image.Width; j++)
                {

                  Data = Image.GetPixelData(i, j);
                  //按权重重新计算像素值
                  pixel = (byte)(0.3 * Data + 0.59 * Data + 0.11 * Data);
                  Data = pixel;
                  Data = pixel;
                  Data = pixel;
                  
                  destImage.SetPixelData(i, j, Data);
                }
            }

                  //显示图像
                theViewer2.Image = destImage;

2.生成解决方案,并运行程序,显示结果下:对于图像像素的操作就简单介绍到这里,以上内容说的有什么问题的还希望大家给予指出。感谢大家的支持。以下是程序的demo:

gw0506 发表于 2016-9-22 18:00:26

啥也不说了,上金币!
页: [1]
查看完整版本: LeadTools图像处理(二)之获取,操作图像像素