91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用OpenCvSharp如何實現將Mat對象像素化

發布時間:2020-11-18 16:27:17 來源:億速云 閱讀:629 作者:Leah 欄目:開發技術

本篇文章為大家展示了使用OpenCvSharp如何實現將Mat對象像素化,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

1: 輸出一個Mat對象的像素

自定義一個Mat 對象,然后輸出像素值(像素值基本都在 0 – 255 之間 ,圖像為三通道)
代碼

public static void F1()
    {
      Scalar s = new Scalar(0, 0, 255); //定義一個三通道顏色(紅色)
      Mat m = new Mat(100, 100, MatType.CV_8UC3, s); //矩陣數據類型(深度和通道數) MatType


      /*
       * 小圖像的每一個像素值我們都是知道的,可以輸出查看,驗證算法正確性,然后在ran大圖
       */
      //打印 100 * 100 Mat對象像素值
      for (int i = 0; i < m.Height; i++)
      {
        for (int j = 0; j < m.Width; j++)
        {
          Vec3b color = m.Get<Vec3b>(i, j); //new Vec3b(); 顏色通道類型 (字節的三元組),直接視同Get泛型方法返回指定類型

          //單獨獲取指定通道像素
          //color.Item0= m.Get<Vec3b>(i, j).Item0; //R
          //color.Item1 = m.Get<Vec3b>(i, j).Item1; //G
          //color.Item2 = m.Get<Vec3b>(i, j).Item2; //B

          Console.Write(color.Item0 + " " + color.Item1 + " " + color.Item2);
          Console.WriteLine(" "); //輸出一個換行
        }
        
      }

      using (new Window("M", WindowMode.AutoSize, m))
      {
        Cv2.WaitKey(0);
      }

    }

使用OpenCvSharp如何實現將Mat對象像素化

100*100 個像素大小的圖像不是很大,顏色在代碼值指定了(0,0,255)三通道的顏色值,打印出來都只是(0,0,255)。
下面讀取一張彩色圖片試一下:

 public static void F1(string path)
    {
      //Scalar s = new Scalar(0, 0, 255);
      //Mat m = new Mat(100, 100, MatType.CV_8UC3, s); //矩陣數據類型(深度和通道數) MatType
      Mat m = new Mat(path, ImreadModes.AnyColor | ImreadModes.AnyDepth);

      /*
       * 小圖像的每一個像素值我們都是知道的,可以輸出查看,驗證算法正確性,然后在ran大圖
       */
      //打印 100 * 100 Mat對象像素值
      for (int i = 0; i < m.Height; i++)
      {
        for (int j = 0; j < m.Width; j++)
        {
          Vec3b color = m.Get<Vec3b>(i, j); //new Vec3b(); 顏色通道類型(字節的三元組) ,直接視同Get泛型方法返回指定類型

          //單獨獲取指定通道像素
          //color.Item0= m.Get<Vec3b>(i, j).Item0; //R
          //color.Item1 = m.Get<Vec3b>(i, j).Item1; //G
          //color.Item2 = m.Get<Vec3b>(i, j).Item2; //B

          Console.Write(color.Item0 + " " + color.Item1 + " " + color.Item2);
          Console.WriteLine(" "); //輸出一個換行
        }
        
      }
      Console.WriteLine("圖像高度:{0}", m.Height);
      Console.WriteLine("圖像寬度:{0}", m.Width);
      using (new Window("M", WindowMode.AutoSize, m))
      {
        Cv2.WaitKey(0);
      }

    }

使用OpenCvSharp如何實現將Mat對象像素化

這張圖比較大,輸出像素要費點時間,最后輸出了圖像的高度和寬度 480 * 512 =245760 多個像素點。 像素點的值 都在0 --255之間且是正數。

2:使用指針獲取一個像素值和圖像的行列值

代碼 在C#中使用指針方法要加 unsafe , Main函數也要加

unsafe static void Main(string[] args)
    {
      string imagePath = @"E:\image\lenna.png"; //圖片加載路徑
      
      Function1(imagePath);
    }
/// <summary>
    /// 操作指針要加 unsafe
    /// </summary>
    unsafe public static void Function1(string path)
    {
      Mat src = new Mat(path, ImreadModes.AnyColor);
      if (src.Empty()) //判斷 MAT對象是否為空,不過在C#中好像沒用,因為在mat對象初始化的時候找不到圖片就直接拋出異常了,但是C++中可以用來判斷。
      {
        Console.WriteLine("加載圖像出錯");
        return;
      }


      /*
       C++:
       Mat dst;
       dst=Mat(src.Size(), src.Type());
       dst=Scalar(127,0,255);
       */
      //Scalar s = new Scalar(127, 0, 255); //創建一個顏色標量(RED)C# 中是一個對象
      // Mat dst = new Mat(src.Size(), src.Type(),s);//創建一個與src 的大小和類型一直的圖片矩陣

      //Mat dst = src.Clone(); //克隆:得到一個完全拷貝的對象

      Mat dst = new Mat();
      src.CopyTo(dst); //拷貝一個與克隆類似,但是dst必須先new出來

      //Cv2.CvtColor(src, dst, ColorConversionCodes.BGRA2GRAY); //轉為灰度圖
      Console.WriteLine("InputImage 顏色通道:{0}", src.Channels()); //顏色通道數
      Console.WriteLine("Create 顏色通道:{0}", dst.Channels()); //顏色通道數

      //指針獲取值(根據下標),第一個像素值
      IntPtr c = dst.Ptr(0); //Mat對象的 Ptr方法:返回指向指定矩陣行的指針。
      byte* c1 = (byte*)c; //像素值在C#中是byte類型 ,在C++中是 uchar類型
      //byte* cc = (byte*)dst.Ptr(0);
      Console.WriteLine("第一個像素值:{0}", *c1);

      int row = dst.Rows; //行
      int clo = dst.Cols; //列
      Console.WriteLine("Rows :{0} ;Cols :{1}", row, clo);
      using (new Window("Create", WindowMode.FreeRatio, dst))
      using (new Window("InputImage", WindowMode.FreeRatio, src))
      {
        Cv2.WaitKey(0);
      }
    }

使用OpenCvSharp如何實現將Mat對象像素化

上述內容就是使用OpenCvSharp如何實現將Mat對象像素化,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永和县| 宾阳县| 淮阳县| 安徽省| 金阳县| 松潘县| 平利县| 那坡县| 丰顺县| 石城县| 乌拉特中旗| 秦安县| 咸宁市| 潼关县| 建平县| 金堂县| 彭水| 松阳县| 佛山市| 浮山县| 休宁县| 遂溪县| 洛浦县| 民乐县| 奎屯市| 石家庄市| 华容县| 大冶市| 巢湖市| 平阴县| 鲁山县| 嘉兴市| 浮山县| 彭阳县| 洛阳市| 桦甸市| 三原县| 开原市| 亚东县| 连云港市| 福泉市|