OpenCV 学习笔记 基础知识

1  矩阵类型 Mat 和 IplImage 相互转换。

1.1  Mat 转 IplImage

  1. Mat img1 = imread("test.jpg",0);
  2. IplImage *img;  
  3. img = &IplImage(img1);

 1.2  IplImage 转 Mat

  1. IplImage *iplImg = cvLoadImage("test.jpg", 1);
  2. Mat img(iplImg );

2  序列图片读取

  1. {
  2. string first_file = "test.jpg";//
  3. //序列读取
  4. VideoCapture sequence(first_file);
  5. if (!sequence.isOpened())
  6. {
  7. cerr << "Failed to open the image sequence!\n" << endl;
  8. return 1;
  9. }
  10. Mat img1;
  11. int i = 1;
  12. for (;;)
  13. {
  14. sequence >> img1;
  15. if (img1.empty())
  16. {
  17. cout << "End of Sequence" << endl;
  18. break;
  19. }
  20. //序列写入
  21. char s[25];
  22. sprintf(s,"IMG-0002-000%02d.jpg" , i);
  23. cv::imwrite(s, res);
  24. i++;
  25. }
  26. }


3  操作图片像素

3.1  IPlImage 图片类型

  1. Mat img1 = cv::imread("test.jpg",0);
  2.     IplImage *img;
  3.     img = &IplImage(img1);
  4.  
  5.     for (int i = 0; i < img->height; ++i) {
  6.         for (int j = 0; j < img->width; ++j) {
  7.             CvScalar scalar = cvGet2D(img, i, j);//获取像素值
  8.             //scalar.val[0]、scalar.val[1]、scalar.val[2]分别代表该点的BGR值,可进行操作
  9.             //cout << scalar.val[0] <<scalar.val[1]<<scalar.val[2];
  10.             //cvSet2D(img, i, j, s);//set the (i,j) pixel value
  11.             //cvSet2D(img, i, j, scalar);
  12.             if ((scalar.val[0] == 0) && (scalar.val[1] ==0) && (scalar.val[2] == 0))
  13.             {
  14.                 scalar.val[0] = 255;
  15.                 scalar.val[1] = 255;
  16.                 scalar.val[2] = 255;
  17.                 //cvSet2D(img, i, j, s);//set the (i,j) pixel value
  18.                 cvSet2D(img, i, j, scalar);//修改像素值
  19.             }
  20.             else
  21.             {
  22.                 scalar.val[0] = 0;
  23.                 scalar.val[1] = 0;
  24.                 scalar.val[2] = 0;
  25.                 //cvSet2D(img, i, j, s);//set the (i,j) pixel value
  26.                 cvSet2D(img, i, j, scalar);
  27.             }
  28.         }
  29.     }

3.2  Mat图片类型

  1.     Mat outputImage, inputImage;
  2.     outputImage = inputImage.clone();//图片复制
  3.     Mat_<Vec3b>::iterator it = outputImage.begin<Vec3b>();
  4.     Mat_<Vec3b>::iterator itend = outputImage.end<Vec3b>();
  5.     for (; it != itend; ++it){
  6.         (*it)[0] = 0; //操作像素点
  7.         (*it)[1] = 0;
  8.         (*it)[2] = 0;
  9.     }  

4  掩膜操作

  1. Mat backImage = cv::imread("test1.jpg"); //掩膜  黑色区域显示原图区域
  2.     Mat maskImg = cv::imread("test1.jpg");
  3.     Mat img111 = cv::imread("1.jpg");//原图
  4.     Mat  out;
  5.     img111.copyTo(out);
  6.     backImage.copyTo(out, maskImg);
  7.     imshow("mask", out);  











posted @ 2016-10-28 16:57  Galaxy_Fish  阅读(344)  评论(0编辑  收藏  举报