#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(,),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();
cvReleaseImage(&getimg);
cvReleaseImage(&dest);
cvDestroyAllWindows();
}
void CVFILTER2D(IplImage * img ,IplImage *dst)
{
CvMat *mat = cvCreateMat(,,CV_32F);
cvFilter2D(img, dst, mat);//cvPoint(1,1));
}
//卷积边界
void CVCOPYMAKEBORDER(IplImage *ori, IplImage *dst)
{
cvCopyMakeBorder(ori,dst,cvPoint(,),IPL_BORDER_CONSTANT,cvScalarAll());
}
//梯度和Sobel导数
void CVSOBEL(IplImage * img, IplImage *dst)
{
cvSobel(img,dst,,,);//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,);
cvCvtColor(img,grayimg,CV_RGB2GRAY);
cvCanny(grayimg,grayimg,,,);
cvShowImage("convolution", grayimg);
}
//霍夫圆变换
void CVHOUGHCIRCLES(IplImage *img)
{
//IplImage *img = cvLoadImage(filename); IplImage *image = cvCreateImage(cvGetSize(img), img->depth, );
cvCvtColor(img, image, CV_RGB2GRAY);
CvMemStorage *storage = cvCreateMemStorage();
cvSmooth(image,image,CV_GAUSSIAN,,); CvSeq *results = cvHoughCircles(
image,
storage,
CV_HOUGH_GRADIENT,
,
image->width /
);
for (int i = ; i < results->total; i++)
{
float *p = (float *)cvGetSeqElem(results,i);
CvPoint pt = cvPoint(cvRound(p[]),cvRound(p[]));
cvCircle(image,pt,cvRound(p[]),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(,,,));
cvFlip(img,img,-);
cvResetImageROI(img);
//cvCvtColor(img,img,CV_RGB2BGR);
//cvSmooth(img,img,CV_GAUSSIAN);
//cvShowImage("convolution",img);
}
void CVCHANGE(IplImage *img)//仿射变换
{
//定义两个CvPoint2D32F的数组
//第一个数组用来标定将要变换的原始图像中的区域
//第二个数组用来标定变换后的图像在窗口中的位置
CvPoint2D32f SrcTri[], DstTri[];
//定义仿射映射矩阵,然后计算(2*3的矩阵)
CvMat *warp_mat = cvCreateMat(,,CV_32FC1);
CvMat *rot_mat = cvCreateMat(, , CV_32FC1);
IplImage *src, *dst;
src = img;
dst = cvCloneImage(src);
SrcTri[].x = ; SrcTri[].y = ;
SrcTri[].x = src->width-; SrcTri[].y = ;
SrcTri[].x = ; SrcTri[].y = src->height - ;
DstTri[].x = ; DstTri[].y = src->height*0.33;
DstTri[].x = src->width*0.85; DstTri[].y = src->height*0.25;
DstTri[].x = src->width*0.15; DstTri[].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/,src->height/);
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-------函数使用二(图像变换)的更多相关文章

  1. python学习之函数(二)

    4.4.6 动态传参 动态传参是针对形参而言 1.动态位置参数 ​ 在静态位置参数时,我们知道,定义函数时有几个位置参数,调用时就必须给几个实参,不能多也不能少.有时候,实际应用过程中,参数往往不能固 ...

  2. OpenCv函数学习(一)

    Intel Image Processing Library (IPL) typedef struct _IplImage { int nSize; /* IplImage大小 */ int ID; ...

  3. OpenCV2学习笔记(十五):利用Cmake高速查找OpenCV函数源代码

    在使用OpenCV时,在对一个函数的调用不是非常了解的情况下,通常希望查到该函数的官方声明.而假设想进一步研究OpenCV的函数,则必须深入到源码. 在VS中我们能够选中想要查看的OpenCV函数,点 ...

  4. C#中的函数式编程:递归与纯函数(二) 学习ASP.NET Core Razor 编程系列四——Asp.Net Core Razor列表模板页面

    C#中的函数式编程:递归与纯函数(二)   在序言中,我们提到函数式编程的两大特征:无副作用.函数是第一公民.现在,我们先来深入第一个特征:无副作用. 无副作用是通过引用透明(Referential ...

  5. 学习OpenCV研究报告指出系列(二)源代码被编译并配有实例project

    下载并安装CMake3.0.1       要自己编译OpenCV2.4.9的源代码.首先.必须下载编译工具,使用的比較多的编译工具是CMake. 以下摘录一段关于CMake的介绍: CMake是一个 ...

  6. 【从零学习openCV】IOS7人脸识别实战

    前言 接着上篇<IOS7下的人脸检測>,我们顺藤摸瓜的学习怎样在IOS7下用openCV的进行人脸识别,实际上非常easy,因为人脸检測部分已经完毕,剩下的无非调用openCV的方法对採集 ...

  7. 深入学习OpenCV中图像灰度化原理,图像相似度的算法

    最近一段时间学习并做的都是对图像进行处理,其实自己也是新手,各种尝试,所以我这个门外汉想总结一下自己学习的东西,图像处理的流程.但是动起笔来想总结,一下却不知道自己要写什么,那就把自己做过的相似图片搜 ...

  8. 学习OpenCV双目测距原理及常见问题解答

    学习OpenCV双目测距原理及常见问题解答 转自博客:https://blog.csdn.net/angle_cal/article/details/50800775 一. 整体思路和问题转化.  图 ...

  9. [opencv]<学习Opencv>英文原版翻译学习

    [注]下文全部内容为 <<Learning OpenCV 3: Computer Vision in C++ with the OpenCV Library>>经由在线翻译整理 ...

  10. <学习opencv>图像和大型阵列类型

    OPenCV /*=========================================================================*/ // 图像和大型阵列类型 /* ...

随机推荐

  1. 【springmvc+mybatis项目实战】杰信商贸-4.maven依赖+PO对+映射文件

    上一篇我们附件的增删改查功能全部完成.但是我们的附件有一个字段叫做“类型”(ctype),这里我们要使用数据字典,所以对于这一块我们要进行修改. 首先介绍一下数据字典 数据字典它是一个通用结构,跟业务 ...

  2. 从零开始的Python学习Episode 2——运算符与while循环

    一.算术运算符 加法:+,减法:-,乘法*,除法/,整除(地板除)//,取余%,乘方**.  二.逻辑运算符 且:and,或:or,非:not 优先级:not>and>or 短路原则: 对 ...

  3. 共识算法 pos,Dpos

    在之前讲解了比特币中的共识算法pow(proot of work),我们先来简单的回顾一下. 新的交易将会广播给所有节点. 每个节点将都会讲新的交易收集到一个区块中. 每个节点都在为其区块收集困难的工 ...

  4. 定点数(fixed-point number)

    定义 定点数(fixed-point number)就是小数点位置固定的数,也就是说,小数点后面的位数是固定的,比如要记录一笔账目,这些账目的数字都不会超过100,就可以使用2位小数位定点数来记录,比 ...

  5. javaIO--文件操作类

    文件操作类主要是使用File类的各种方法对文件和目录进行操作.包括文件名.文件长度.最后修改时间和是否只读等,提供获得当前文件的路径名.判断文件是否存在.创建.删除文件和目录等一系列的操作方法. 下面 ...

  6. 3dContactPointAnnotationTool开发日志(二二)

      昨天是实现了显示GameObject子GameObject的选项卡功能,今天就是要让statusPanel可以控制它们的位置.旋转和缩放了.   没什么难的,对应选项卡绑定上对应的物体或子物体即可 ...

  7. 3ds Max学习日记(七)

      第7章讲的是多边形建模,实例略多,有十六个,再加上周日的怠惰感,只做了几个实例. 附上今日的劳动成果:   布料(创建一个平面,转换为可编辑多边形,然后调整顶点,连接一些边,添加网格平滑,转换为可 ...

  8. 重要的几个按键Tab Ctrl+c Ctrl+d

    1.Tab按键具有命令补齐和档案补齐的功能,重点是可以避免我们打错命令或者文件名,但是Tab按键在不同的地方输入会有不同的结果 试着多按几下,或者连按两次相信你会发现新大陆 a.Tab接在一串指令的第 ...

  9. 常见设备在linux中的文件名

    设备 linux中的文件名 IDE硬盘 /dev/hd[a-d] SATA/USB/SCSI/SAS /dev/sd[a-p] 软盘 /dev/fd[0-1] 打印机 25针:/dev/lp[0-2] ...

  10. Java 8中 基本数据类型

    1)四种整数类型(byte.short.int.long):    byte:8 位,用于表示最小数据单位,如文件中数据,-128~127    short:16 位,很少用,-32768 ~ 327 ...