image.cpp
上传用户:banwdc
上传日期:2016-06-25
资源大小:2871k
文件大小:1k
源码类别:

OpenCV

开发平台:

Visual C++

  1. /*   程序名: image.cpp
  2. 功能: 本程序显示如何用C++类来创建和显示图像,这个C++类在 cxcore.hpp 中定义,与 矩阵类(CvMatrix) 相似
  3. */
  4. #include "cv.h"
  5. #include "highgui.h"
  6. int main( int argc, char** argv )
  7. {
  8.     // 结构中载入图像:图像也是BMP图像(cvLoadImage)或者其它格式
  9.     // XML/YAML (cvLoad)
  10.     CvImage img(argc > 1 ? argv[1] : "lena.jpg", 0, CV_LOAD_IMAGE_COLOR),
  11.         img_yuv, y, noise;
  12.     CvRNG rng = cvRNG(-1);
  13.     if( !img.data() ) // 检查图像是否被载入
  14.         return -1;
  15.     img_yuv = img.clone(); // 克隆图像
  16.     cvCvtColor( img, img_yuv, CV_BGR2YCrCb ); // 色彩空间转换
  17.     y.create( img.size(), IPL_DEPTH_8U, 1 ); // 创建图像
  18.     noise.create( img.size(), IPL_DEPTH_32F, 1 );
  19.     cvSplit( img_yuv, y, 0, 0, 0 ); // 分解
  20. // 正态分布的随机数组
  21. cvRandArr( &rng, noise, CV_RAND_NORMAL, cvScalarAll(0), cvScalarAll(20) ); 
  22.     cvSmooth( noise, noise, CV_GAUSSIAN, 5, 5, 1, 1 ); // GAUSSIAN滤波做平衡
  23.     cvAcc( y, noise );  // noise = noise + y
  24.     cvConvert( noise, y ); // y = noise * 1 + 0
  25.     cvMerge( y, 0, 0, 0, img_yuv );  // 图层合并
  26.     cvCvtColor( img_yuv, img, CV_YCrCb2BGR ); // 图像色彩空间转换
  27.     cvNamedWindow( "image with grain", CV_WINDOW_AUTOSIZE );
  28.     img.show( "image with grain" ); // cvShowImage的另外一种形式
  29.     cvWaitKey();
  30.     return 0;
  31. // 所有图像自动释放,这是使用C++类比较方便的地方
  32. }