题目要求 |
程序代码 |
结果图片 |
要言妙道 |
找到并载入一副正面人脸图,眼睛是睁开的,并且占了图像大部分区域,写代码找出眼睛的瞳孔
一个拉普拉斯算子“像”黑暗中的一个中心亮点,瞳孔正好相反,用一个足够大的拉普拉斯算子进行转换和卷积
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 11 #include <opencv2/legacy/legacy.hpp> 12 //#pragma comment(lib, "opencv_legacy2411.lib") 13 14 using namespace cv; 15 using namespace std; 16 17 //函数声明-->--->-->--->-->--->-->--->// 18 19 20 //<--<--<--<--<--<--<--<--<--函数声明// 21 22 int _tmain(int argc, _TCHAR* argv[]) 23 { 24 const char * soutceFile = "D:\Work\Work_Programming\Source\Image\OpenCVExerciseImage\第6章\瞳孔.jpg"; 25 IplImage * image_Resource = cvLoadImage(soutceFile, CV_LOAD_IMAGE_GRAYSCALE); 26 assert(image_Resource); 27 28 CvSize image_size = cvSize(image_Resource->width, image_Resource->height); 29 30 cvNamedWindow("原始图像", CV_WINDOW_AUTOSIZE); 31 cvNamedWindow("题目_a", CV_WINDOW_AUTOSIZE); 32 33 cvShowImage("原始图像", image_Resource); 34 35 //---------------------------a:--------------------------------/: 36 37 IplImage * image_Result_a = cvCreateImage(image_size, IPL_DEPTH_64F, image_Resource->nChannels); 38 cvZero(image_Result_a); 39 40 cvLaplace(image_Resource, image_Result_a, 21); 41 42 cvSave("image_Result_a.xml", image_Result_a); 43 44 IplImage * image_8U_ToShow = cvCreateImage(image_size, IPL_DEPTH_8U, image_Resource->nChannels); 45 cvConvertScaleAbs(image_Result_a, image_8U_ToShow); 46 47 cvShowImage("题目_a", image_8U_ToShow); 48 49 //---------------------------a:--------------------------------/。 50 51 cvWaitKey(0); 52 53 cvReleaseImage(&image_Resource); 54 cvReleaseImage(&image_Result_a); 55 56 cvDestroyWindow("原始图像"); 57 cvDestroyWindow("题目_a"); 58 59 return 0; 60 }
如果换一张图片,使用如下代码替换,效果图如下:
const char * soutceFile = "D:\Work\Work_Programming\Source\Image\OpenCVExerciseImage\第6章\眼睛.jpg"; ///....... cvLaplace(image_Resource, image_Result_a, 17);
①拉普拉斯算子一个通常的应用是检测“团块”、边缘检测
②源图像可以是8位无符号图像,也可以是32浮点图像,但目标图像必须是16位(有符号)或32位浮点图像。