20200611小記——C#畫圖(3)利用OpceCV成圖

首先,打開VS(用的是VS2019)

其次在工具中的NuGet包管理器中搜索:OpenCVSharp這個包,一般排在前面下載量最大的就是了。

將OpenCVSharp安裝到項目中後,會發現項目中多了幾個dll:

一般我們使用using OpenCvSharp.CPlusPlus;using OpenCvSharp;這兩個就夠了。

成圖方式1:

        Mat grayImage = new Mat(new Size(width, height), MatType.CV_8UC1); 
        grayImage.SetArray(0, 0, Color);

這裏的Color是一個width*heightbyte [,] 數組,成圖之前首先需要在內存定義一個空間Mat,才能繼續操作。故一般需要知道成圖的長寬。當然這只是灰度圖。如果要成彩色圖,則可修改爲:

Mat Image = new Mat(new Size(width + 1, height + 1), MatType.CV_8UC3, Scalar.White);

Scalar.White只是將圖片原始底色置爲白色,可不加也可修改爲其他顏色。MatType 是成圖的樣式,這裏MatType.CV_8UC3和MatType.CV_8UC1區別在於一個是三通道,一個是單通道。

三通道和單通道,也就是RGB和灰度圖的差別(目前作者也只是瞭解到這個程度了)
三通道的賦值便不能使用BYTE來賦值,而需要使用三個BYTE,這裏便需要用到自帶的OpenCvSharp.CPlusPlus.Vec3b類,具體用法如下:
         

Mat Image = new Mat(new Size(width + 1, height + 1), MatType.CV_8UC3, Scalar.White);
byte r=100;byte b=120;byte b=150;
Vec3b bgr=new Vec3b(b, g, r)
Image.Set<Vec3b>(i, j, bgr);//i,j對應像素點在圖片的寬高位置

需要注意的是Vec3b的數據順序是BGR而不是我們常說的RGB。
單通道也可以逐個像素點賦值,比如grayImage.Set<byte>(i, j, (byte)gray);

Set和SetArray兩個函數的運行速度自然是不同的,之前一直逐個像素點的Set,也是後面才發現SetArray這個函數整體賦值比之前快多了。

20200611小記

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章