学习opencv-------函数使用二(图像变换)
2014-09-20 19:42
281 查看
#include"cv.h" #include"highgui.h" using namespace cv; void CVFILTER2D(IplImage * img, IplImage *dst); void CVCOPYMAKEBORDER(IplImage *ori, IplImage *dst); void CVSOBEL(IplImage * img, IplImage *dst); void CVLAPLACE(IplImage *img, IplImage *dst); void CVCANNY(IplImage *img); void CVHOUGHCIRCLES(IplImage *img); void CVINVERT(IplImage *img); void CVCHANGE(IplImage *img); int main() { IplImage *fromimg = cvLoadImage("e:/picture/Wife2.jpg"); IplImage *getimg = cvCreateImage(cvSize(400,600),fromimg->depth,fromimg->nChannels); cvResize(fromimg,getimg); //IplImage *dest = cvCreateImage(cvSize(getimg->width+1,getimg->height+1),getimg->depth,getimg->nChannels);//for cvCopyMakeBorder() IplImage *dest = cvCreateImage(cvSize(getimg->width, getimg->height), getimg->depth, getimg->nChannels); CVFILTER2D(getimg,dest); //CVCOPYMAKEBORDER(getimg,dest); //CVSOBEL(getimg,dest); //CVLAPLACE(getimg,dest); //CVCANNY(getimg); //CVHOUGHCIRCLES(getimg); //CVCHANGE(getimg); cvNamedWindow("convolution"); cvNamedWindow("originpicture"); cvShowImage("originpicture",getimg); cvShowImage("convolution",dest); cvWaitKey(0); cvReleaseImage(&getimg); cvReleaseImage(&dest); cvDestroyAllWindows(); } void CVFILTER2D(IplImage * img ,IplImage *dst) { CvMat *mat = cvCreateMat(400,500,CV_32F); cvFilter2D(img, dst, mat);//cvPoint(1,1)); } //卷积边界 void CVCOPYMAKEBORDER(IplImage *ori, IplImage *dst) { cvCopyMakeBorder(ori,dst,cvPoint(1,1),IPL_BORDER_CONSTANT,cvScalarAll(255)); } //梯度和Sobel导数 void CVSOBEL(IplImage * img, IplImage *dst) { cvSobel(img,dst,0,1,3);//cvSobel(const CvArr* src,CvArr* dst,int xorder,int yorder,int aperture_size=3(1,3,5,7)) } //拉普拉斯变换 void CVLAPLACE(IplImage *img, IplImage *dst) { cvLaplace(img, dst); } //canny算子检测边界 void CVCANNY(IplImage *img) { IplImage *grayimg = cvCreateImage(cvGetSize(img),img->depth,1); cvCvtColor(img,grayimg,CV_RGB2GRAY); cvCanny(grayimg,grayimg,100,100,3); cvShowImage("convolution", grayimg); } //霍夫圆变换 void CVHOUGHCIRCLES(IplImage *img) { //IplImage *img = cvLoadImage(filename); IplImage *image = cvCreateImage(cvGetSize(img), img->depth, 1); cvCvtColor(img, image, CV_RGB2GRAY); CvMemStorage *storage = cvCreateMemStorage(0); cvSmooth(image,image,CV_GAUSSIAN,5,5); CvSeq *results = cvHoughCircles( image, storage, CV_HOUGH_GRADIENT, 2, image->width / 10 ); for (int i = 0; i < results->total; i++) { float *p = (float *)cvGetSeqElem(results,i); CvPoint pt = cvPoint(cvRound(p[0]),cvRound(p[1])); cvCircle(image,pt,cvRound(p[2]),CV_RGB(0xff,0xff,0xff)); } cvShowImage("convolution",image); } //图像颠倒位置 void CVINVERT(IplImage *img) { //cvRectangle(img,cvPoint(220,160),cvPoint(280,220),cvScalar(200,100,100),5); cvSetImageROI(img,cvRect(220,160,60,60)); cvFlip(img,img,-1); cvResetImageROI(img); //cvCvtColor(img,img,CV_RGB2BGR); //cvSmooth(img,img,CV_GAUSSIAN); //cvShowImage("convolution",img); } void CVCHANGE(IplImage *img)//仿射变换 { //定义两个CvPoint2D32F的数组 //第一个数组用来标定将要变换的原始图像中的区域 //第二个数组用来标定变换后的图像在窗口中的位置 CvPoint2D32f SrcTri[3], DstTri[3]; //定义仿射映射矩阵,然后计算(2*3的矩阵) CvMat *warp_mat = cvCreateMat(2,3,CV_32FC1); CvMat *rot_mat = cvCreateMat(2, 3, CV_32FC1); IplImage *src, *dst; src = img; dst = cvCloneImage(src); SrcTri[0].x = 0; SrcTri[0].y = 0; SrcTri[1].x = src->width-1; SrcTri[1].y = 0; SrcTri[2].x = 0; SrcTri[2].y = src->height - 1; DstTri[0].x = 0; DstTri[0].y = src->height*0.33; DstTri[1].x = src->width*0.85; DstTri[1].y = src->height*0.25; DstTri[2].x = src->width*0.15; DstTri[2].y = src->height*0.7; //获取映射矩阵 cvGetAffineTransform(SrcTri,DstTri,warp_mat); //映射变换 cvWarpAffine(src,dst,warp_mat); cvCopy(dst,img); //cvShowImage("convolution",dst); //下面是对变换后的图像进一步旋转 CvPoint2D32f center = cvPoint2D32f(src->width/2,src->height/2); double angle = 50.0; double scale = 0.1; //旋转图像 //上面center是旋转中心 //下面函数的第二个和第三个参数给出了旋转的角度和缩放的尺度 //最后一个参数是输出的映射矩阵 /*cv2DRotationMatrix( CvPoint2D32F center double angle double scale CvMat *map_matrix )*/ cv2DRotationMatrix(center,angle,scale,rot_mat); cvWarpAffine(src,dst,rot_mat); cvShowImage("convolution",dst); }
相关文章推荐
- 基础学习笔记之opencv(24):imwrite函数的使用
- 基础学习笔记之opencv(24):imwrite函数的使用
- 基础学习笔记之opencv(18):kmeans函数使用实例
- 学习opencv-------函数使用一
- 基础学习笔记之opencv(24):imwrite函数的使用
- 基础学习笔记之opencv(18):kmeans函数使用实例
- 基础学习笔记之opencv(24):imwrite函数的使用
- opencv 网站tutorials学习翻译 --使用图形处理函数
- 基础学习笔记之opencv(24):imwrite函数的使用
- 【OpenCV学习笔记】【函数学习】十四(cvSeq的用法说明(功能很多,按照需求使用))
- 基础学习笔记之opencv(24):imwrite函数的使用
- opencv学习笔记:特征点匹配函数使用注意
- (未实用 需多个函数配套使用)opencv3.0 函数学习 10——morphologyEx 形态学图像处理:开运算、闭运算、形态学梯度、顶帽、黑帽合辑
- 遗传算法与直接搜索工具箱学习笔记 五-----使用GPS算法寻找一个函数的最小值
- Linux内核的ioctl函数学习2 - linux系统ioctl使用示例
- OpenCV编程案例:使用轮廓函数检测连通区域
- OpenCV函数学习之cvAbsDiff
- Linux内核的ioctl函数学习2 - linux系统ioctl使用示例
- 学习51笔记与一份从网上找的资料:单片机C语言中_nop_函数的使用及C语言的延时计算2010-
- 学习opencv第二章函数