学习OPENCV书中一些函数的应用

来源:互联网 发布:专看耽美漫画的软件 编辑:程序博客网 时间:2024/05/16 06:09

第5章:

#include "cv.h"
#include "highgui.h"

void onthreshold(IplImage* src, IplImage* dst);     //单一阈值化
void onadptivethreshold(IplImage* src, IplImage* dst);   //自适应阈值化

int main(int agrc, char** agrv)
{
 IplImage* src_image = cvLoadImage("1.png");
 IplImage* dst_image = cvCloneImage(src_image);
 IplImage* temp = cvCloneImage(src_image);

 IplImage* pyr_temp = cvCreateImage(cvSize(src_image->width/2, src_image->height/2), src_image->depth, 3);
 cvNamedWindow("src_image", 1);
 cvShowImage("src_image", src_image);

 cvPyrDown(src_image, pyr_temp, CV_GAUSSIAN_5x5);              //降采样操作
 cvNamedWindow("pyrdown_image", 1);
 cvShowImage("pyrdown_image", pyr_temp);

 cvErode(src_image, dst_image, NULL, 1);      //腐蚀
 cvNamedWindow("erode_image", 1);
 cvShowImage("erode_image", dst_image);

 cvDilate(src_image, dst_image, NULL, 1);       //膨胀 
 cvNamedWindow("dilate_image", 1);
 cvShowImage("dilate_image", dst_image);

 cvMorphologyEx(src_image, dst_image, temp, NULL, CV_MOP_GRADIENT, 1);       //形态学梯试操作 
 cvNamedWindow("morphology_image", 1);
 cvShowImage("morphology_image", dst_image);


 cvMorphologyEx(src_image, dst_image, temp, NULL, CV_MOP_BLACKHAT, 1);        //形态学黑帽 
 cvNamedWindow("tophat_image", 1);
 cvShowImage("tophat_image", dst_image);

 
 IplImage* temp_dst = cvCreateImage(cvGetSize(src_image), IPL_DEPTH_8U, 1);
 IplImage* gray_image = cvCreateImage(cvGetSize(src_image), IPL_DEPTH_8U, 1);
              
 cvCvtColor(src_image, gray_image, CV_RGB2GRAY);                    
 cvNamedWindow("gray_image", 1);
 cvShowImage("gray_image", gray_image);
 
 onthreshold(src_image, temp_dst);                          //单一阈值化
 cvNamedWindow("threshold1_image", 1);
 cvShowImage("threshold1_image", temp_dst);
 cvThreshold(gray_image, temp_dst, 100, 255, CV_THRESH_BINARY);                      
 cvNamedWindow("threshold2_image", 1);
 cvShowImage("threshold2_image", temp_dst);

 
 cvAdaptiveThreshold(gray_image, temp_dst, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY, 3, 5);                      //自适应阈值化
 cvNamedWindow("adaptivethreshold_image", 1);
 cvShowImage("adaptivethreshold_image", temp_dst);

 


 cvReleaseImage(&src_image);
 cvReleaseImage(&dst_image);
 cvReleaseImage(&temp_dst);
 cvReleaseImage(&temp);
 cvReleaseImage(&gray_image);
 cvReleaseImage(&pyr_temp);

 int c = cvWaitKey(0);
 if (c ==27)
 {
  return -1;
 }
 return 0;

}

//单一阈值化
//
void onthreshold(IplImage* src, IplImage* dst)
{
 IplImage* image_r = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
 IplImage* image_g = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);
 IplImage* image_b = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);

 cvSplit(src, image_r, image_g, image_b, NULL);
 
 IplImage* temp = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U, 1);

 cvAddWeighted(image_r, 1./3., image_g, 1./3., 0.0, temp);
 cvAddWeighted(temp, 2./3., image_b, 1./3., 0.0, temp);

 cvThreshold(temp, dst, 100, 255, CV_THRESH_BINARY);

 cvReleaseImage(&image_r);
 cvReleaseImage(&image_g);
 cvReleaseImage(&image_b);
 cvReleaseImage(&temp);

}

原创粉丝点击