相關(guān)鏈接
C++&Python&Csharp in OpenCV 專欄
【2022B站最好的OpenCV課程推薦】OpenCV從入門到實(shí)戰(zhàn) 全套課程(附帶課程課件資料+課件筆記)
OpenCV4 C++ 快速入門視頻30講 - 系列合集
OpenCV4 C++ 課程筆記
前言
在上一章糾結(jié)過教程的選擇之后,還是覺得老老實(shí)實(shí)從零開始學(xué)OpenCV,從OpenCV C++視頻教程開始。
這里確保你已經(jīng)擁有了三語言環(huán)境。而且用于CSharp的代碼和C++的代碼差不多,所以我會(huì)按照C++,CSharp,Python的順序?qū)懘a
C++&Python&C# 三語言O(shè)penCV從零開發(fā)(1):環(huán)境配置
Mat是什么
Mat - 基本圖像容器
OpenCV2:Mat屬性type,depth,step
Mat是圖像的基本容器,將圖像信息轉(zhuǎn)化為數(shù)字信息,MAT本質(zhì)上是一個(gè)矩陣。
讀取圖片
我們?cè)囋囎x取圖片
C++
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
//注意,文件的路徑必須是反斜杠/
Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png");
//顯示圖片
imshow("C++ Png", src);
waitKey(0);
destroyAllWindows();
return 0;
}
C#
internal class Program
{
static void Main(string[] args)
{
Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png");
//顯示圖片
Cv2.ImShow("CSharp", src);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
Python
Python和C++最大的區(qū)別就是少了一個(gè)變量的命名
import cv2
# python中需要np來輔助
import numpy as np
src = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png")
cv2.imshow("Python",src)
cv2.waitKey(0)
cv2.destroyAllWindows()
灰度處理
OpenCV 提供了讀取灰度圖像的接口
- CV2.IMREAD_COLOR:彩色圖像
- CV2.IMREAD_GRAYSCALE:灰度圖像
C++
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
//注意,文件的路徑必須是反斜杠/
//IMREAD_GRAYSCALE灰度讀取
Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",IMREAD_GRAYSCALE);
//顯示圖片
imshow("C++", src);
waitKey(0);
destroyAllWindows();
return 0;
}
CSharp
using OpenCvSharp;
namespace HelloOpenCV
{
internal class Program
{
static void Main(string[] args)
{
// 由于C# 有枚舉類型,命名更加舒服
Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",ImreadModes.Grayscale);
//顯示圖片
Cv2.ImShow("CSharp", src);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
}
Python
import cv2
# python中需要np來輔助
import numpy as np
# IMREAD_GRAYSCALE,灰度讀取
src = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",cv2.IMREAD_GRAYSCALE)
cv2.imshow("Python",src)
cv2.waitKey(0)
cv2.destroyAllWindows()
打印圖像信息
C++
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include<iostream>
using namespace std;
using namespace cv;
int main()
{
//注意,文件的路徑必須是反斜杠/
//IMREAD_GRAYSCALE灰度讀取
Mat src = imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",IMREAD_GRAYSCALE);
//顯示圖片
imshow("C++", src);
cout << endl;
//打印圖像信息
cout << "圖像的行數(shù)為: " << src.rows << endl; //獲取圖像的高度,行數(shù);
cout << "圖像的列數(shù)為: " << src.cols << endl; //獲取圖像的寬度,列數(shù);
cout << "圖像的通道數(shù)為: " << src.channels() << endl; //獲取圖像的通道數(shù),彩色圖=3,灰度圖=1;
cout << "圖像的尺寸為: " << src.size << endl; //獲取圖像的尺寸,行*列;
waitKey(0);
destroyAllWindows();
return 0;
}
Csharp
一般來說,只要C++跑通了,C# 的代碼大差不差
using OpenCvSharp;
namespace HelloOpenCV
{
internal class Program
{
static void Main(string[] args)
{
// 由于C# 有枚舉類型,命名更加舒服
Mat src = Cv2.ImRead("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",ImreadModes.Grayscale);
Console.WriteLine($"圖像的行數(shù)為:{src.Rows}");
Console.WriteLine($"圖像的列數(shù)為:{src.Cols}");
Console.WriteLine($"圖像的通道數(shù)為:{src.Channels()}");
Console.WriteLine($"圖像的尺寸為:{src.Size()}");
//顯示圖片
Cv2.ImShow("CSharp", src);
Cv2.WaitKey(0);
Cv2.DestroyAllWindows();
}
}
}
Python
import cv2
# python中需要np來輔助
import numpy as np
# IMREAD_GRAYSCALE,灰度讀取
src = cv2.imread("D:/workSpace/OpenCV/HellOpenCV/Resources/OpenCV.png",cv2.IMREAD_GRAYSCALE)
# 打印圖片信息
# Python將其信息統(tǒng)一放在了shape里面,如果是單通道,通道個(gè)數(shù)直接沒有
print('行,列,通道',src.shape)
print('type:',src.dtype)
# print(str.shape)
cv2.imshow("Python",src)
cv2.waitKey(0)
cv2.destroyAllWindows()
總結(jié)
如果說C++ 版本是原版的話。那么文章來源:http://www.zghlxwxcb.cn/news/detail-811206.html
- C++和Python:Python少了變量的聲明,算子基本一致
- C++和C#:除非命名方式,C#為大駝峰,其它基本完全一致
我感覺我的學(xué)習(xí)的路子應(yīng)該是對(duì)的,畢竟是新手,三個(gè)語言的基礎(chǔ)的算子還是都要了解一下的。文章來源地址http://www.zghlxwxcb.cn/news/detail-811206.html
到了這里,關(guān)于C++&Python&C# 三語言O(shè)penCV從零開發(fā)(3):圖像讀取和顯示的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!