1.載入一個帶有有趣紋理的圖像,使用cvSmooth()函數以多種方法平滑圖像,參數爲smoothtype = CV_GAUSSIAN.函數
a.使用對稱的平滑的平滑窗口,大小依次是3x3,5x5,9x9,11x11,並顯示結果。ui
b.用5x5高斯濾淨器平滑圖像兩次和用兩次11x11平滑器平滑一次的輸出結果是最接近相同嗎?爲何?spa
#include <cv.h> #include <highgui.h> int main() { IplImage *img = cvLoadImage("3.jpg", 1); cvNamedWindow("原圖", 1); cvShowImage("原圖", img); IplImage *three = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *double_five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *nine = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *eleven = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *double_eleven = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); cvSmooth(img, three, CV_GAUSSIAN, 3, 3); cvSmooth(img, five, CV_GAUSSIAN, 5, 5); cvSmooth(img, nine, CV_GAUSSIAN, 9, 9); cvSmooth(img, eleven, CV_GAUSSIAN, 11, 11); cvSmooth(five, double_five, CV_GAUSSIAN, 5, 5); cvSmooth(eleven, double_eleven, CV_GAUSSIAN, 11, 11); cvNamedWindow("three", 1); cvNamedWindow("five", 1); cvNamedWindow("nine", 1); cvNamedWindow("eleven", 1); cvNamedWindow("double_five", 1); cvNamedWindow("double_eleven", 1); cvShowImage("three", three); cvShowImage("five", five); cvShowImage("nine", nine); cvShowImage("eleven", eleven); cvShowImage("double_five", double_five); cvShowImage("double_eleven", double_eleven); cvWaitKey(); cvReleaseImage(&img); cvReleaseImage(&three); cvReleaseImage(&five); cvReleaseImage(&double_five); cvReleaseImage(&nine); cvReleaseImage(&eleven); cvReleaseImage(&double_eleven); cvDestroyAllWindows(); return 0; }
2.code
#include <cv.h> #include <highgui.h> int main() { IplImage *img = cvCreateImage(cvSize(400, 400), IPL_DEPTH_8U, 1); IplImage *five = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); IplImage *nine = cvCreateImage(cvSize(img->width, img->height), img->depth, img->nChannels); cvZero(img); cvNamedWindow("main1", 1); cvShowImage("main1", img); for (int i = 199; i <= 201; i++) { uchar *ptr = (uchar*)(img->imageData + i*img->widthStep); for (int j = 199; j <= 201; j++) { ptr[j] = 0xff; } } cvNamedWindow("main", 1); cvShowImage("main", img); cvSmooth(img, five, CV_GAUSSIAN,5,5); cvSmooth(five, five, CV_GAUSSIAN, 5, 5); cvNamedWindow("five", 1); cvShowImage("five", five); cvSmooth(five, nine, CV_GAUSSIAN, 9, 9); cvNamedWindow("nine", 1); cvShowImage("nine", nine); cvWaitKey(); cvReleaseImage(&img); cvReleaseImage(&five); cvReleaseImage(&nine); cvDestroyAllWindows(); return 0; }
4.blog
#include <cv.h> #include <highgui.h> int main() { IplImage *img1 = cvLoadImage("111.jpg", 0); IplImage *img2 = cvLoadImage("112.jpg", 0); IplImage *img3 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels); IplImage *img4 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels); IplImage *img5 = cvCreateImage(cvSize(img1->width, img1->height), img1->depth, img1->nChannels); cvSub(img1, img2,img3,NULL);//img1 - img2 cvAbs(img3, img3); // img3 的絕對值 cvDilate(img3, img4, NULL, 1); //膨脹處理 cvErode(img4, img5, NULL, 1); //腐蝕操做 cvNamedWindow("111.jpg", 1); cvNamedWindow("112.jpg", 1); cvNamedWindow("img3", 1); cvNamedWindow("img4", 1); cvNamedWindow("img5", 1); cvShowImage("111.jpg", img1); cvShowImage("112.jpg", img2); cvShowImage("img3", img3); cvShowImage("img4", img4); cvShowImage("img5", img5); cvWaitKey(); cvReleaseImage(&img1); cvReleaseImage(&img2); cvReleaseImage(&img3); cvReleaseImage(&img4); cvReleaseImage(&img5); cvDestroyAllWindows(); return 0; }
5three
#include <cv.h> #include <highgui.h> int main() { IplImage *img1 = cvLoadImage("100.jpg", CV_LOAD_IMAGE_GRAYSCALE); IplImage *img2 = cvLoadImage("101.jpg", CV_LOAD_IMAGE_GRAYSCALE); IplImage *img3 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels); IplImage *img4 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels); IplImage *img5 = cvCreateImage(cvGetSize(img1), img1->depth, img1->nChannels); cvSub(img1, img2, img3, NULL);//img1 - img2 = img3 cvAbs(img3, img3); //img3 的絕對值 cvThreshold(img3, img4, 0, 255, CV_THRESH_BINARY_INV); //對img3進行二進制閥值操做 IplConvKernel *element = cvCreateStructuringElementEx(3, 3, 1, 1, CV_SHAPE_RECT, NULL);//自定義核 cvMorphologyEx(img4, img5, NULL, element, CV_MOP_OPEN, 1);//進行開運算 cvReleaseStructuringElement(&element); //釋放核 cvNamedWindow("img1", 1); cvNamedWindow("img2", 1); cvNamedWindow("img3", 1); cvNamedWindow("img4", 1); cvNamedWindow("img5", 1); cvShowImage("img1", img1); cvShowImage("img2", img2); cvShowImage("img3", img3); cvShowImage("img4", img4); cvShowImage("img5", img5); cvWaitKey(); cvReleaseImage(&img1); cvReleaseImage(&img2); cvReleaseImage(&img3); cvReleaseImage(&img4); cvReleaseImage(&img5); cvDestroyAllWindows(); return 0; }