#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;
}