博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
My third day of OpenCV
阅读量:4320 次
发布时间:2019-06-06

本文共 2777 字,大约阅读时间需要 9 分钟。

    今日依旧偷懒,只看了几页纸照着书做了两个例程。思路依旧简单:

    (一)显示结果图像代码写在主函数中:(如2.)

   (a)在主函数中创建IplImage格式变量,利用cvLoadImage加载图像

   (b)在主函数中调用所写的图像处理函数

          功能函数注意选择需要传递的参数。

          功能函数中一般先确保该函数需要满足的条件(某些操作或者待用的OpenCV函数需要图像满足一定条件,如Canny

          算子需要灰度图才行),然后定义IplImage格式的输出变量,调用OpenCV函数执行功能(一般为xxx(in,

          out))

   (c)在主函数中cvNamedWindow创建窗口,cvShowImage显示图像,cvWaitKey( 0 )按键等待,cvReleaseImage 

          释放资源,cvDestroyWindow销毁窗口

   (二)显示结果图像代码写在功能函数中:(如1.)

   (a)在主函数中创建IplImage格式变量,利用cvLoadImage加载图像

   (b)在主函数中调用所写的图像处理函数

   (c)在功能函数中cvNamedWindow创建窗口,cvShowImage显示图像,cvWaitKey( 0 )按键等待,cvReleaseImage 

          释放资源,cvDestroyWindow销毁窗口

两种方法没有本质区别,博主倾向方法(一)

1.图像高斯平滑

#include "highgui.h"

#include "cv.h"

void example2_4( IplImage* image )

{
// Create some windows to show the input
// and output images in.
//
cvNamedWindow( "Example4-in" ,0);
cvNamedWindow( "Example4-out",0 );
// Create a window to show our input image
//
cvShowImage( "Example4-in", image );
// Create an image to hold the smoothed output
//
IplImage* out = cvCreateImage(cvGetSize(image),IPL_DEPTH_8U,);
// Do the smoothing
//
cvSmooth( image, out, CV_GAUSSIAN, 3, 3 );
// Show the smoothed image in the output window
//
cvShowImage( "Example4-out", out );
// Be tidy
//
cvReleaseImage( &out );
// Wait for the user to hit a key, then clean up the windows
//
cvWaitKey( 0 );
cvDestroyWindow( "Example4-in" );
cvDestroyWindow( "Example4-out" );
}
void main()
{
IplImage* img = cvLoadImage( "1.jpg", CV_LOAD_IMAGE_COLOR);
example2_4( img );
}

2.Canny平滑与图像缩小

#include "highgui.h"

#include "cv.h"

IplImage* doPyrDown(IplImage* in,int filter = IPL_GAUSSIAN_5x5)

{
   // Best to make sure input image is divisible by two.
   //
      assert( in->width%2 == 0 && in->height%2 == 0 );
      IplImage* out = cvCreateImage(cvSize( in->width/2, in->height/2 ),in->depth,in->nChannels);
      cvPyrDown( in, out );
      return( out );
};

IplImage* doCanny(IplImage* in,double lowThresh,double highThresh,int aperture)
{
      if(in->nChannels != 1)
        return(0); //Canny only handles gray scale images

   IplImage* out = cvCreateImage(cvGetSize( in ) ,IPL_DEPTH_8U,1);

      cvCanny( in, out, lowThresh, highThresh, aperture );

     return( out );
};

void main()

{
cvNamedWindow( "in" ,0);
cvNamedWindow( "img1" ,0);
cvNamedWindow( "img2" ,0);
cvNamedWindow( "img3" ,0);
IplImage* in = cvLoadImage( "1.jpg", CV_LOAD_IMAGE_COLOR);
IplImage* img1 = doPyrDown( in, IPL_GAUSSIAN_5x5 );
IplImage* img2 = doPyrDown( img1, IPL_GAUSSIAN_5x5 );
IplImage* img3 = doCanny( img2, 10, 100, 3 );
cvShowImage( "in", in );
cvShowImage( "img1", img1 );
cvShowImage( "img2", img2 );
cvShowImage( "img3", img3 );
cvWaitKey( 0 );
cvReleaseImage( &img1 );
cvReleaseImage( &img2 );
cvReleaseImage( &img3 );
cvDestroyWindow( "in" );
cvDestroyWindow( "img1" );
cvDestroyWindow( "img2" );
cvDestroyWindow( "img3" );
}

转载于:https://www.cnblogs.com/my-idiot-days/archive/2013/01/27/2879214.html

你可能感兴趣的文章
Nginx日志增长过快详细分析
查看>>
View Controller Programming Guid for iOS 笔记
查看>>
[模板] 最大流和费用流分别的两种做法
查看>>
python 最大连续子数组的和
查看>>
Python中的闭包
查看>>
05.if else format
查看>>
如何从Eclipse官网下载我们想要的版本
查看>>
js获取spn里面的东西
查看>>
Mongodb之增删改查操作
查看>>
elasticsearch 索引,更新,增量更新,不停机修改升级 ,简单使用
查看>>
前端生成二维码图片以及条形码图片
查看>>
LA4794 分享巧克力
查看>>
《梦断代码》第四阶段阅读感想(包括第9、10、11共三章)
查看>>
OpenCV4Android 之 OpenCV4Android SDK
查看>>
serialVersionUID作用
查看>>
解决无法访问U盘打开提示拒绝访问的问题
查看>>
unicode 字符串。互相准换
查看>>
分组加密算法CBC模式的 Padding Oracle Attack 与 Hash算法的Length Extention Attack 小记...
查看>>
虚拟基类的初始化
查看>>
C++中析构函数为什么要是虚函数
查看>>