【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor
生活随笔
收集整理的這篇文章主要介紹了
【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
| 題目要求 |
| 程序代碼 |
| 結果圖片 |
| 要言妙道 |
?
?
?
??
?
題目要求:
?讀入一副風景圖,然后將其轉化為灰度圖像
a、對圖像進行形態(tài)學“禮帽”操作,并顯示結果
b、將結果圖像轉化為8位的掩碼
c、復制灰度值到禮帽塊中,顯示結果→我的理解是,將第a問與b問的結果圖片融合成一副圖
?
程序代碼:
?
1 // OpenCVExerciseTesting.cpp : 定義控制臺應用程序的入口點。 2 // 3 //D:\\Work\\Work_Programming\\Source\\Image\\lena.jpg 4 5 6 #include "stdafx.h" 7 #include <cv.h> 8 #include <highgui.h> 9 #include <iostream> 10 using namespace cv; 11 using namespace std; 12 13 //函數(shù)聲明-->--->-->--->-->--->-->--->// 14 15 //<--<--<--<--<--<--<--<--<--函數(shù)聲明// 16 17 18 int _tmain(int argc, _TCHAR* argv[]) 19 { 20 const char * fileName1 = "D:\\Work\\Work_Programming\\Source\\Image\\OpenCVExerciseImage\\第5章\\風景.jpg"; 21 IplImage * src1 = cvLoadImage(fileName1, CV_LOAD_IMAGE_UNCHANGED); 22 assert(src1); 23 24 cvNamedWindow("原始圖像", 0); 25 cvNamedWindow("題目_a", 0); 26 cvNamedWindow("題目_b", 0); 27 cvNamedWindow("題目_c", 0); 28 29 IplImage * img_Gray = cvCreateImage(cvSize(src1->width, src1->height), IPL_DEPTH_8U, 1); 30 31 //使用cvCvtColor和cvCopy這些函數(shù)前,都應該對參數(shù)進行驗證再使用 32 if (src1->nChannels != 3) 33 { 34 cout << "加載的圖像必須為彩色圖片" << endl; 35 return 0; 36 } 37 38 cvCvtColor(src1, img_Gray, CV_RGB2GRAY); 39 40 cvShowImage("原始圖像", img_Gray); 41 42 //---------------------------a:開始--------------------------------// 43 44 45 IplImage * imgCopy = cvCloneImage(img_Gray); 46 cvZero(imgCopy); 47 48 IplConvKernel * kernel = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT); 49 cvMorphologyEx(img_Gray, imgCopy, NULL, kernel, CV_MOP_TOPHAT,6); 50 51 cvShowImage("題目_a", imgCopy); 52 53 //---------------------------a:結束--------------------------------// 54 55 //---------------------------b:開始--------------------------------// 56 57 58 IplImage * imgCopy_b = cvCloneImage(img_Gray); 59 cvZero(imgCopy_b); 60 61 cvThreshold(imgCopy, imgCopy_b, 50, 255, CV_THRESH_BINARY); 62 63 cvShowImage("題目_b", imgCopy_b); 64 65 //---------------------------b:結束--------------------------------// 66 67 //---------------------------c:開始--------------------------------// 68 69 70 IplImage * imgCopy_c = cvCloneImage(imgCopy); 71 //cvZero(imgCopy_c); 72 73 cvCopy(imgCopy_b, imgCopy_c, imgCopy_b); 74 75 cvShowImage("題目_c", imgCopy_c); 76 77 //---------------------------c:結束--------------------------------// 78 79 cvWaitKey(0); 80 81 cvReleaseImage(&src1); 82 cvReleaseImage(&imgCopy); 83 cvReleaseImage(&imgCopy_b); 84 cvReleaseImage(&imgCopy_c); 85 86 cvDestroyWindow("原始圖像"); 87 cvDestroyWindow("題目_a"); 88 cvDestroyWindow("題目_b"); 89 cvDestroyWindow("題目_c"); 90 91 return 0; 92 } 93?
結果圖片:
?
要言妙道:
?①使用cvCvtColor、cvCopy等函數(shù)時,注意驗證輸入圖片的有效性,不然會報錯,例如:
1 //使用cvCvtColor和cvCopy這些函數(shù)前,都應該對參數(shù)進行驗證再使用 2 if (src1->nChannels != 3) 3 { 4 cout << "加載的圖像必須為彩色圖片" << endl; 5 return 0; 6 } 7 8 cvCvtColor(src1, img_Gray, CV_RGB2GRAY);?
②制作掩碼圖像其實就是二值化圖像,使用漫水填充法也可以得到掩碼圖像,而且其中有關于mask的參數(shù)圖像的用法
③可以使用cvCopy進行圖像融合,利用上第三個參數(shù)
④禮帽和黑帽:這些操作分別用于分離比鄰近的點亮或暗的一些斑塊。所以,可用于實現(xiàn)類似Cognex的CogBlobTool功能,OpenCV中有類似描述Blob的結果:CvConnectedComponent
?
轉載于:https://www.cnblogs.com/tingshuixuan2012/p/4455632.html
總結
以上是生活随笔為你收集整理的【练习5.9】图像掩码、礼帽、cvCopy、图像融合、cvCvtColor的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 斗地主你什么时候才会托管?(.NET中的
- 下一篇: nginx编译安装时添加echo模块