OpenCV杂记06---形态学、膨胀和腐蚀

来源:互联网 发布:结构软件下载 编辑:程序博客网 时间:2024/05/06 14:04

原文地址:
http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/imgproc/erosion_dilatation/erosion_dilatation.html#morphology-1

总结本程序的收获。

1、掌握窗口排列函数cvMoveWindow的使用。
2、学会创建滑动条并调用回调函数。createTrackbar的第五个参数调用自定义的函数。

存疑的问题。

1、滑动条的名字显示不完整,中间部分被省略。

代码如下。

#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include "highgui.h"#include <stdlib.h>#include <stdio.h>using namespace cv;using namespace std;/// 全局变量Mat src, erosion_dst, dilation_dst;int erosion_elem = 0;int erosion_size = 0;int dilation_elem = 0;int dilation_size = 0;int const max_elem = 2;int const max_kernel_size = 21;char* win_name1 = "Erosion Demo";char* win_name2 = "Dilation Demo";/** Function Headers */void Erosion( int, void* );void Dilation( int, void* );/** @function main */int main( int argc, char** argv ){  char* ImgPath = "D:/lena.jpg";    /// Load 图像  src = imread( ImgPath );  if( !src.data )  { return -1; }  /// 创建显示窗口  namedWindow( win_name1, CV_WINDOW_AUTOSIZE );  namedWindow( win_name2, CV_WINDOW_AUTOSIZE );  cvMoveWindow( win_name1, 0,0 );  cvMoveWindow( win_name2, src.cols , 0 );  /// 创建腐蚀 Trackbar  createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Erosion Demo",                  &erosion_elem, max_elem,                  Erosion );  createTrackbar( "Kernel size:\n 2n +1", "Erosion Demo",                  &erosion_size, max_kernel_size,                  Erosion );  /// 创建膨胀 Trackbar  createTrackbar( "Element:\n 0: Rect \n 1: Cross \n 2: Ellipse", "Dilation Demo",                  &dilation_elem, max_elem,                  Dilation );  createTrackbar( "Kernel size:\n 2n +1", "Dilation Demo",                  &dilation_size, max_kernel_size,                  Dilation );  /// Default start  Erosion( 0, 0 );  Dilation( 0, 0 );  waitKey(0);  return 0;}/**  @function Erosion  */void Erosion( int, void* ){  int erosion_type;  if( erosion_elem == 0 ){ erosion_type = MORPH_RECT; }  else if( erosion_elem == 1 ){ erosion_type = MORPH_CROSS; }  else if( erosion_elem == 2) { erosion_type = MORPH_ELLIPSE; }  Mat element = getStructuringElement( erosion_type,                                       Size( 2*erosion_size + 1, 2*erosion_size+1 ),                                       Point( erosion_size, erosion_size ) );  /// 腐蚀操作  erode( src, erosion_dst, element );  imshow( win_name1, erosion_dst );}/** @function Dilation */void Dilation( int, void* ){  int dilation_type;  if( dilation_elem == 0 ){ dilation_type = MORPH_RECT; }  else if( dilation_elem == 1 ){ dilation_type = MORPH_CROSS; }  else if( dilation_elem == 2) { dilation_type = MORPH_ELLIPSE; }  Mat element = getStructuringElement( dilation_type,                                       Size( 2*dilation_size + 1, 2*dilation_size+1 ),                                       Point( dilation_size, dilation_size ) );  ///膨胀操作  dilate( src, dilation_dst, element );  imshow( win_name2, dilation_dst );}
0 0