二、OpenCV自學筆記:圖片的顯示、腐蝕、模糊、邊緣檢測

一、 運行環境

我這裏是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;
}

 

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