(2)Opencv之图像变换(尺寸,缩放,Canny边缘检测)

平台:32位Win7操作系统+VS2012+OpenCv2.4.4 

实验目的:通常我们可以应用某种方式变换,用输出来覆盖输入变量,但是这并不是总是行得通的。具体来说,有些操作输出的图像比输入的图像相比,大小/深度/通道数目都不一样。

     故,我们希望对一些原始图像进行一系列操作并且产生一系列变换后的图像。在Opencv中有几个封装好的函数很有用,这些函数既包含输出图像内存空间分配,同时也进行

     了一些我们感兴趣的变换。缩放处理常通过cvPyrDown()函数来完成。

实验内容:1.对原RGB图像进行灰度处理;

     2.利用cvPyrDown()创建一幅高度宽度均为输入图像一半尺寸的图像;

     3.利用Canny边缘检测输出一个单通道(灰度级)图像。

 

 

过程中问题描述:
1)编译报错
错误 1 error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. d:\opencv2.4.4\opencv\build\include\opencv2\flann\logger.h 66 1 ImageTransform
不知道是什么原因图像也输不出来。我只写了简单的输出图像程序还是报错。奇怪了,我之前写的时候怎么没有报错???还是我处理了我不记得了???我参照链接http://blog.csdn.net/guoming0000/article/details/8838810解决方法竟然可以解决。操作步骤::属性管理器——>Microsoft.Cpp.Win32.user(点击右键,属性)——>C/C++——>预处理器——>添加了一下几项(WIN32,_DEBUG,_CONSOLE,_CRT_SECURE_NO_WARNINGS). 

实现代码:

 

    1. #include "stdafx.h"
    2. #include "cv.h"
    3. #include <cxcore.h>
    4. #include <highgui.h>
    5. //第一个函数:缩放处理函数       
    6. IplImage*doPyrDown(IplImage*in,int filter=IPL_GAUSSIAN_5x5){
    7.             assert(in->width%2==0 && in->height%2==0);//确认长宽像素是偶数(否则无法缩放一半)
    8.             IplImage* out=cvCreateImage(
    9.                 cvSize(in->width/2,in->height/2),
    10.                 in->depth,
    11.                 in->nChannels
    12.                 );//创建新图像,长宽各一半,同深度,同通道数
    13.             cvPyrDown(in,out);
    14.             return(out);
    15.         };
    16. //第二个函数:Canny边缘检测
    17. IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,double aperture){
    18.     if(in->nChannels!=1)
    19.         return(0);//Canny只能处理灰度图
    20.     IplImage* out = cvCreateImage( 
    21.         cvGetSize( in ),
    22.         in->depth, //IPL_DEPTH_8U, 
    23.         1);
    24.     cvCanny( in, out, lowThresh, highThresh, aperture );
    25.     //函数的第二及第三个参数为两个阈值。小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割
    26.     return( out );
    27. };
    28. int main( int argc, char** argv ){
    29.     cvNamedWindow("Example RGB", CV_WINDOW_AUTOSIZE );
    30.     cvNamedWindow("Example Gray", CV_WINDOW_AUTOSIZE );
    31.     cvNamedWindow("Example Pyr", CV_WINDOW_AUTOSIZE );
    32.     cvNamedWindow("Example Canny", CV_WINDOW_AUTOSIZE );
    33.     IplImage* img_rgb = cvLoadImage("cube.jpg");//载入原RBG图
    34.     IplImage* out;
    35.     cvShowImage("Example RGB",img_rgb );//显示原RBG图
    36.     out = cvCreateImage( cvSize( img_rgb->width,img_rgb->height ), img_rgb->depth, 1);
    37.     cvCvtColor(img_rgb, out ,CV_BGR2GRAY);//把载入图像转换为灰度图
    38.     cvShowImage("Example Gray", out );//显示灰度图
    39.     out = doPyrDown( out );
    40.     out = doPyrDown( out );//执行两次缩小处理
    41.     cvShowImage("Example Pyr", out );//显示缩小图
    42.     out = doCanny( out, 10, 100, 3 );//进行Canny边缘检测
    43.     cvShowImage("Example Canny", out );//显示canny边缘检测图
    44. cvWaitKey(0);
    45. cvReleaseImage( &out);//通过每个独立独立阶段处理图像,简化了流程
    46. cvDestroyWindow("Example Gray");
    47. cvDestroyWindow("Example Pyr");
    48. cvDestroyWindow("Example Canny");
    49. }

 

实现结果:(注,此处使用的http://blog.chinaunix.net/uid-26673820-id-3066244.html代码和粘贴的图片)

 

转载于:https://www.cnblogs.com/study5201314/p/3164781.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值