一、 運行環境
我這裏是Visual studio 2015 + OpenCV 4.0.1,OpenCV3以上的應該都可以。
二、 代碼示例
1. 顯示
//顯示一張圖片
void showImg()
{
const char* ImgPath = "AWVS1455.JPG";
const char* WindowName = "原圖";
Mat img = imread(ImgPath);
if (img.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
//圖片較大時可使用該函數設置窗口顯示屬性,因爲默認屬性可能導致圖片顯示不全
namedWindow(WindowName, WINDOW_NORMAL);
imshow(WindowName, img);
waitKey(0);
}
2. 腐蝕
//腐蝕一張圖片
void ErodeImg()
{
const char* ImgPath = "2468.png";
const char* WindowName1 = "原圖";
const char* WindowName2 = "效果圖";
Mat SourceImage = imread(ImgPath);
if (SourceImage.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
imshow(WindowName1, SourceImage);
//該函數構造並返回可進一步傳遞給#腐蝕、#膨脹或#morphologyEx的結構化元素。也可以自己構造一個任意的二進制掩碼,並將其用作結構化元素。
Mat element = getStructuringElement(MORPH_ELLIPSE, Size(10, 10));
Mat ResultImage;
erode(SourceImage, ResultImage, element);//使用指定的結構元素對源圖像進行腐蝕
imshow(WindowName2, ResultImage);
waitKey(0);
}
3. 模糊
//模糊一張圖片
void BlurImg()
{
const char* ImgPath = "1357.jpg";
const char* WindowName1 = "原圖";
const char* WindowName2 = "效果圖";
Mat SourceImg = imread(ImgPath);
if (SourceImg.empty())
{
cerr << "Read img file error !" << endl;
system("pause");
return;
}
//圖片較大時可使用該函數設置窗口顯示屬性,因爲默認屬性可能導致圖片顯示不全
imshow(WindowName1, SourceImg);
Mat ResultImg;
//
blur(SourceImg, ResultImg, Size(5, 5));
imshow(WindowName2, ResultImg);
waitKey(0);
}
4. Canny邊緣檢測
//Canny邊緣檢測
void cannyImg()
{
//1. 載入原圖
Mat srcImg = imread("1357.jpg");//讀取原圖
imshow("【原始圖】Canny邊緣檢測", srcImg);//顯示原圖
Mat dstImage, edge, grayImage;//參數定義
//2. 創建與src同類型和大小的矩陣(dst)
dstImage.create(srcImg.size(), srcImg.type());
//3. 將原圖像轉換爲灰度圖像
cvtColor(srcImg, grayImage, COLOR_BGR2GRAY);
//4. 使用 3x3 內核來降噪
blur(grayImage, edge, Size(3, 3));
//5. 運行Canny算子
Canny(edge, edge, 3, 9, 3);
//6. 顯示效果圖
imshow("【效果圖】Canny邊緣檢測", edge);
waitKey(0);
}
5. 然後main函數
int main(int argc, char* argv[])
{
cannyImg();
system("pause");
return 0;
}