• Emgu CV4图像处理之访问图像像素通道值7(C#)


    本文测试环境:

    win10  64位

    vistual studio 2019  

    Emgu CV 4.6.0

    环境配置准备:

    1 新增控制台项目,.net framework为4.7.2

    2  把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下

    3  项目选择x64

    4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll  

    具体配置参考:

    Emgu CV4图像处理之环境搭建1(C#)_zxy2847225301的博客-CSDN博客

    下面的内容参考自:

    EmguCV-第08讲-访问图像像素_YADONCHEN的博客-CSDN博客

    预备知识:

    在这里插入图片描述

    (Row0,Column0)代表像素的(横坐标,纵坐标),注意观察,当图片为彩色图片时,一个Column就存有3个通道的值,分别为BGR 

    创建EmguCV的Image对象并访问像素值:

    1   灰度图

    创建方式1:创建宽度为300,高度为200的灰度图片

    Image image1 = new Image(300, 200);

    创建方式2:从文件中读取灰度图并创建Image对象

    Image image1 = new Image(“test.png”);

    访问像素(100,200)对应的灰度值

    Gray grayValue = image1[100,200];

    设置像素(100,200)对应的灰度值

    image1[100, 200]=new Gray(244);

    把一张彩色的图片通过灰度的方式读进来会怎样呢?

    彩色图片deskpic.png如下:

    代码如下:

    1. Image image1 = new Image("deskpic.png");
    2. Gray grayValue = image1[100,200];
    3. //Image转Mat
    4. Mat mat_deskpic = image1.Mat;
    5. //显示图
    6. CvInvoke.Imshow("mat_deskpic", mat_deskpic);
    7. CvInvoke.WaitKey(0);

    运行结果如下:

     

    2  彩色图

    创建方式1:创建宽度为300,高度为200的灰度图片

    创建方式1 :创建一张宽度为300,高度为200纯红色的背景图
     Image image1 = new Image(300, 200, new Bgr(0, 0, 255));

    创建方式2:从文件中读取灰度图并创建Image对象

    Image image1 = new Image(“test.png”);

    访问值:

                //访问像素宽度为100,像素高度为100蓝色通道的像素值
                Byte bgrValue_100_100_0 = image.Data[100, 100, 0];
                //访问像素宽度为100,像素高度为100绿色通道的像素值
                Byte bgrValue_100_100_1 = image.Data[100, 100, 1];
                //访问像素宽度为100,像素高度为100红色通道的像素值
                Byte bgrValue_100_100_2 = image.Data[100, 100, 2];

    设置值:

                //设置像素宽度为100,像素高度为100蓝色通道的像素值
                image.Data[100, 100, 0]=254;
                //设置像素宽度为100,像素高度为100绿色通道的像素值
                image.Data[100, 100, 1]=254;
                //设置像素宽度为100,像素高度为100红色通道的像素值
                image.Data[100, 100, 2]=254;

    例子:创建一张300*200的红色背景图,然后遍历像素,把下半部分变成蓝色

    1. using Emgu.CV;
    2. using Emgu.CV.Structure;
    3. using System;
    4. using System.Collections.Generic;
    5. using System.IO;
    6. using System.Linq;
    7. using System.Text;
    8. using System.Threading.Tasks;
    9. namespace EmguCVDemo2
    10. {
    11. class Program
    12. {
    13. static void Main(string[] args)
    14. {
    15. //创建一张宽度为300,高度为200纯红色的背景图
    16. Image image = new Image(300, 200, new Bgr(0, 0, 255));
    17. //Image转Mat
    18. Mat mat_red = image.Mat;
    19. //显示红色背景图
    20. CvInvoke.Imshow("mat_red", mat_red);
    21. CvInvoke.WaitKey(0);
    22. //销毁红色背景图窗体
    23. CvInvoke.DestroyWindow("mat_red");
    24. //把图像保存后,可以看到图片的像素为 300*200
    25. CvInvoke.Imwrite("mat_red_save.png", image);
    26. for (int width = 0; width <300; width++)
    27. {
    28. for (int height = 100; height < 200; height++)
    29. {
    30. //b通道设为255
    31. image.Data[height,width, 0] = 255;
    32. //g通道设为0
    33. image.Data[height, width, 1] = 0;
    34. //r通道设置为0
    35. image.Data[height, width, 2] = 0;
    36. }
    37. }
    38. CvInvoke.Imshow("red_green_pic", image);
    39. CvInvoke.WaitKey(0);
    40. Console.ReadLine();
    41. }
    42. }
    43. }

    运行结果:

     随便按键盘一个键后的效果:

     

     

  • 相关阅读:
    STM32控制数码管从0显示到99
    麒麟龙芯loongarch64 electron 打包deb包
    Flink KafkaSink分区配置的不同版本对比
    yolov5 应用整理
    计算机算法分析与设计(10)---租用游艇问题(含C++代码)
    10-集合3-Map
    Qt 关于QT_BEGIN_NAMESPACE宏的作用
    Three.js如何计算3DObject的2D包围框?
    性能测试_Day_10(负载测试-获得最大可接受用户并发数)
    1156:求π的值
  • 原文地址:https://blog.csdn.net/zxy13826134783/article/details/127727809