学习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;
}
- 学习OPENCV第6章的例程和部分练习
- 《学习OpenCV(中午版)》第3章 练习6
- 《学习OpenCV (中文版)》第2章 练习3和练习4
- 《学习OpenCV(中午版)》第3章 练习3和练习4
- 《学习OpenCV(中文版)》第2章 练习5
- 《学习OpenCV(中文版)》第3章 练习1a
- 《学习OpenCV(中文版)》第3章 练习2
- 《学习OpenCV(中午版)》第3章 练习5
- 《学习OpenCV(中午版)》第3章 练习7
- 《学习OpenCV(中午版)》第3章 练习8
- 《学习OpenCV(中文版)》第4章 练习1
- 《学习OpenCV(中文版)》第4章 练习2
- 《学习OpenCV(中文版)》第4章 练习3a
- 《学习OpenCV(中文版)》第4章 练习3b
- 《学习OpenCV(中文版)》第4章 练习4
- 《学习OpenCV(中文版)》第4章 练习5a
- 【学习OpenCV】OpenCV的GPU模块(CUDA)的配置和例程(含OpenCV 3.0的说明)
- 汇编学习例程 第1~2章
- C# 扩展方法实际应用整理
- UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath
- java中static作用详解
- 关于Android中使用定位的解决方案。
- 在没有仿真器的情况下调试ok6410裸机程序
- 学习OPENCV第6章的例程和部分练习
- for xml path('')
- oracle常用经典sql查询
- java程序题:将一个正整数分解质因数
- mysql 强制索引
- Java中通过代理连接至指定的URL
- 控制台输出乱码的解决方法
- ffmpeg常用头文件和库文件包含
- 软件设计要害之解耦(正文)