首页 > 图像处理_imgproc笔记(1)

图像处理_imgproc笔记(1)

#include 
#include #include "opencv2/imgproc/imgproc.hpp"
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/features2d/features2d.hpp"using namespace std;
using namespace cv;/// 全局变量
int DELAY_CAPTION = 1500;
int DELAY_BLUR = 100;
int MAX_KERNEL_LENGTH = 31;   //最大的核长度Mat src; Mat dst;
char window_name[] = "Smoothing Demo";/// Function headers函数声明
int display_caption( const char* caption );
int display_dst( int delay );/*** function main*/
int main( void )
{namedWindow( window_name, WINDOW_AUTOSIZE );///载入原图想src = imread( "/home/salm/myopencv/images/cat.jpg", 1 );if( display_caption( "Original Image" ) != 0 ) { return 0; }dst = src.clone();if( display_dst( DELAY_CAPTION ) != 0 ) { return 0; }/// Applying Homogeneous blur    使用均值平滑
/*blur归一化块滤波src: 输入图像dst: 输出图像Size( w,h ): 定义内核大小( w 像素宽度, h 像素高度)Point(-1, -1): 指定锚点位置(被平滑点), 如果是负值,取核的中心为锚点。
*/if( display_caption( "Homogeneous Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ blur( src, dst, Size( i, i ), Point(-1,-1) );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// Applying Gaussian blur     使用高斯平滑if( display_caption( "Gaussian Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ GaussianBlur( src, dst, Size( i, i ), 0, 0 ); //Size(w, h): 定义内核的大小(需要考虑的邻域范围)。 w 和 h 必须是正奇数,否则将使用 sigma_{x} 和 sigma_{y} 参数来计算内核大小if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// Applying Median blur    中值滤波if( display_caption( "Median Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ medianBlur ( src, dst, i );  //i: 内核大小 (只需一个值,因为我们使用正方形窗口),必须为奇数if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// Applying Bilateral Filter  双边滤波
/*
bilateral执行双边滤波操作src: 输入图像dst: 输出图像d: 像素的邻域直径sigma_{Color}: 颜色空间的标准方差sigma_{Space}: 坐标空间的标准方差(像素单位)
*/if( display_caption( "Bilateral Blur" ) != 0 ) { return 0; }for ( int i = 1; i < MAX_KERNEL_LENGTH; i = i + 2 ){ bilateralFilter ( src, dst, i, i*2, i/2 );if( display_dst( DELAY_BLUR ) != 0 ) { return 0; } }/// Wait until user press a keydisplay_caption( "End: Press a key!" );waitKey(0);return 0;
}/*** @function display_caption*/
int display_caption( const char* caption )
{dst = Mat::zeros( src.size(), src.type() );putText( dst, caption,Point( src.cols/4, src.rows/2),FONT_HERSHEY_COMPLEX, 1, Scalar(255, 255, 255) );imshow( window_name, dst );int c = waitKey( DELAY_CAPTION );if( c >= 0 ) { return -1; }return 0;
}/*** @function display_dst*/
int display_dst( int delay )
{imshow( window_name, dst );int c = waitKey ( delay );if( c >= 0 ) { return -1; }return 0;
}

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 1.采用:after的方法清除浮动 优点:避免在html里插入多余的标签 详情:http://www.positioniseverything.net/easyclearing.html 整理成一个通用的.clearfix .clearfix:after { content: "."; display: block; height:...