学习OPENCV第6章的例程和部分练习

来源:互联网 发布:淘宝是什么时候成立的 编辑:程序博客网 时间:2024/05/14 14:04

#include "cv.h"
#include "highgui.h"
#include "cxcore.h"
#include <math.h>

int main(int agrc, char** agrv)
{
 IplImage* src_image = cvLoadImage("6.png");
 IplImage* dst_image = cvCloneImage(src_image);
 IplImage* graysrc_image = cvCreateImage(cvGetSize(src_image), IPL_DEPTH_8U, 1);
 IplImage* graydst_image = cvCreateImage(cvGetSize(src_image), IPL_DEPTH_8U, 1);
  
 cvCvtColor(src_image, graysrc_image, CV_RGB2GRAY);           //灰度转换
 
 cvNamedWindow("src_image", 1);
 cvShowImage("src_image", src_image);
 cvNamedWindow("graysrc_image", 1);
 cvShowImage("graysrc_image", graysrc_image);
 

/*
//彩色图像一阶微分
 cvSobel(src_image, dst_image, 1, 0, 3);                    
 cvNamedWindow("sobelx_image", 1);
 cvShowImage("sobelx_image", dst_image); 

 cvSobel(src_image, dst_image, 0, 1, 3); 
 cvNamedWindow("sobely_image", 1);
 cvShowImage("sobely_image", dst_image);

 cvSobel(src_image, dst_image, 1, 1, 3); 
 cvNamedWindow("sobelxy_image", 1);
 cvShowImage("sobelxy_image", dst_image);

//灰度图像一阶微分
 cvSobel(graysrc_image, graydst_image, 1, 0, 3);                
 cvNamedWindow("graysobelx_image", 1);
 cvShowImage("graysobelx_image", graydst_image); 
 
 cvSobel(graysrc_image, graydst_image, 0, 1, 3); 
 cvNamedWindow("graysobely_image", 1);
 cvShowImage("graysobely_image", graydst_image);
 
 cvSobel(graysrc_image, graydst_image, 1, 1, 3); 
 cvNamedWindow("graysobelxy_image", 1);
 cvShowImage("graysobelxy_image", graydst_image);

//
//
//Laplace变换 
 IplImage* temp = cvCreateImage(cvGetSize(src_image), IPL_DEPTH_32F, 3);        
 cvLaplace(src_image, temp, 3);
 cvNamedWindow("laplace_image", 1);
 cvShowImage("laplace_image", temp);
 cvReleaseImage(&temp);
*//*
//
//canny变换

 cvCanny(graysrc_image, graydst_image, 50., 125., 3);                    
 cvNamedWindow("canny_image", 1);
 cvShowImage("canny_image", graydst_image);
*//*
//寻找直线

 CvSeq* lines = 0;
 CvMemStorage* storage = cvCreateMemStorage(0);

 lines = cvHoughLines2(graydst_image, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 30, 10);
 for(int i = 0; i < lines->total; ++i)
 {
  CvPoint* line = (CvPoint*) cvGetSeqElem(lines, i);
  cvLine(graydst_image, line[0], line[1], cvScalar(255, 0, 0), 10, 8, 0);
 }

 cvNamedWindow("line_image", 1);
 cvShowImage("line_image", graydst_image);

//
//logpolar变换
 cvLogPolar(src_image, dst_image, cvPoint2D32f(src_image->width/2, src_image->height/2), 3, CV_INTER_LINEAR + CV_WARP_FILL_OUTLIERS);
 cvNamedWindow("logpolar_image", 1);
 cvShowImage("logpolar_image", dst_image);
//logpolar逆变换
 IplImage* temp = cvCloneImage(src_image);
 cvLogPolar(dst_image, temp, cvPoint2D32f(src_image->width/2, src_image->height/2), 3, CV_INTER_LINEAR + CV_WARP_INVERSE_MAP);
 cvNamedWindow("logpolar_invert_image", 1);
 cvShowImage("logpolar_invert_image", temp);

//
//直方图均衡化
 cvEqualizeHist(graysrc_image, graydst_image);
 cvNamedWindow("equalize_image", 1);
 cvShowImage("equalize_image", graydst_image);
*/
//
//P213.1
/* float L60[] =
 {
  -0.5, -0.5, -0.5, 2.0, -0.5, 
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  0, 0, 0, 0, 0,
  -0.5, 2.0, -0.5, -0.5, -0.5
 
 };
 float L0[] =
 {
  -1,-1,-1,-1,-1,
        0, 0, 0, 0, 0,
        2, 2, 2, 2, 2,
        0, 0, 0, 0, 0,
        -1,-1,-1,-1,-1

 };
 float L45[] =
 {
  0,-1,-1, 0, 2,
        -1,-1, 0, 2, 0,
        -1, 0, 2, 0,-1,
        0, 2, 0,-1,-1,
        2, 0,-1,-1, 0

 };
 float L90[] =
 {
  -1, 0, 2, 0,-1,
        -1, 0, 2, 0,-1,
        -1, 0, 2, 0,-1,
        -1, 0, 2, 0,-1,
        -1, 0, 2, 0,-1

 };
 float L135[] =
 {
  2, 0,-1,-1, 0,
        0, 2, 0,-1,-1,
        -1, 0, 2, 0,-1,
        -1,-1, 0, 2, 0,
        0,-1,-1, 0, 2

 };

 float LL60[] =
 {
  0, 0, 0, 0, 0, 1, 0,
  0, 0, 0, 0, 1, 0, 0,
  0, 0, 0, 0, 0, 0, 0,
  0, 0, 0, 1, 0, 0, 0,
  0, 0, 0, 0, 0, 0, 0,
  0, 1, 0, 0, 0, 0, 0,
  1, 0, 0, 0, 0, 0, 0
 };

 CvMat filter = cvMat(7, 7, CV_32FC1, LL60);
 IplImage* rgb[3];
 IplImage* rgbdst[3];
 for (int i = 0; i != 3; ++i)
 {
  rgb[i] = cvCreateImage(cvGetSize(src_image), src_image->depth, 1);
  rgbdst[i] = cvCreateImage(cvGetSize(src_image), src_image->depth, 1);
 }
 cvSplit(src_image, rgb[0], rgb[1], rgb[2], NULL);

 for (i = 0; i != 3; ++i)
 {
  cvFilter2D(rgb[i], rgbdst[i], &filter, cvPoint(-1, -1));
 }
 cvMerge(rgbdst[0], rgbdst[1], rgbdst[2], NULL, dst_image);
 cvCvtColor(dst_image, graydst_image, CV_RGB2GRAY);

 cvNamedWindow("filter_image", 1);
 cvShowImage("filter_image", graydst_image);
 for (i = 0; i != 3; ++i)
 {
  cvReleaseImage(&rgb[i]);
  cvReleaseImage(&rgbdst[i]);
 }

 cvFilter2D(graysrc_image, graydst_image, &filter, cvPoint(-1, -1));           //尝试直接由灰度图像进行卷积,用于和上面所得的结果比较差异
 cvNamedWindow("filter2_image", 1);
 cvShowImage("filter2_image", graydst_image);
*/
//
//p213.2
//
/*
 float gauss[] =
 {
  1./16, 2./16, 1./16,
  2./16, 4./16, 2./16,
  1./16, 2./16, 1./16
 };

 CvMat gauss_filter = cvMat(3, 3, CV_32FC1, gauss);
 IplImage* rgb[3];
 IplImage* rgbdst[3];
 for (int i = 0; i != 3; ++i)
 {
  rgb[i] = cvCreateImage(cvGetSize(src_image), src_image->depth, 1);
  rgbdst[i] = cvCreateImage(cvGetSize(src_image), src_image->depth, 1);
 }
 cvSplit(src_image, rgb[0], rgb[1], rgb[2], NULL);

 for (i = 0; i != 3; ++i)
 {
  cvFilter2D(rgb[i], rgbdst[i], &gauss_filter, cvPoint(-1, -1));
 }
 cvMerge(rgbdst[0], rgbdst[1], rgbdst[2], NULL, dst_image);

 cvNamedWindow("gauss_image", 1);
 cvShowImage("gauss_image", dst_image);
 for (i = 0; i != 3; ++i)
 {
  cvReleaseImage(&rgb[i]);
  cvReleaseImage(&rgbdst[i]);
 }
*/
//
//p214.4
/*
 cvNamedWindow("draw", 1);
 IplImage* same_circle = cvCreateImage(cvSize(512, 512), IPL_DEPTH_8U, 1);
 cvSet(same_circle, cvScalar(255), NULL);
 for (int r = 20; r < same_circle->width/2; r += 20)
 {
  cvCircle(same_circle, cvPoint(same_circle->width/2, same_circle->height/2), r, cvScalar(0), 1, 8, 0);
 }
 for (int apha = 0, beta = 0; apha < 360; apha += 20, beta += 20)
 {
  int radius = same_circle->width/2-17;
  cvLine(same_circle, cvPoint(same_circle->width/2, same_circle->height/2),
   cvPoint(same_circle->width/2+radius  * cos(apha * CV_PI/180), same_circle->width/2+radius * sin(beta * CV_PI/180)), cvScalar(0), 1, 8, 0);
 }
 cvShowImage("draw", same_circle);
 cvSaveImage("circle of same circle.jpg", same_circle);

 IplImage* temp = cvCreateImage(cvGetSize(same_circle), IPL_DEPTH_8U, 1);

 cvSobel(same_circle, temp, 1, 1, 3);
 cvNamedWindow("3x3", 1);
 cvShowImage("3x3", temp);

 cvSobel(same_circle, temp, 1, 1, 5);
 cvNamedWindow("5x5", 1);
 cvShowImage("5x5", temp);

// cvSobel(same_circle, temp, 1, 1, 9);
// cvNamedWindow("9x9", 1);
// cvShowImage("9x9", temp);

// cvSobel(same_circle, temp, 1, 1, 13);
// cvNamedWindow("13x13", 1);
// cvShowImage("13x13", temp);
*/
//
//
 
 int c = cvWaitKey(0);
 if (c == 27)
 {
  return -1;
 }
 cvReleaseImage(&src_image);
 cvReleaseImage(&dst_image);
 return 0;
}

原创粉丝点击