1.寻找图像中的最大值和最小值

  1. #include <opencv2\opencv.hpp>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. using namespace cv;
  6. int main()
  7. {
  8. system("color F0"); //更改输出界面颜色
  9. float a[12] = { 1, 2, 3, 4, 5, 10, 6, 7, 8, 9, 10, 0 };
  10. Mat img = Mat(3, 4, CV_32FC1, a); //单通道矩阵
  11. Mat imgs = Mat(2, 3, CV_32FC2, a); //多通道矩阵
  12. double minVal, maxVal; //用于存放矩阵中的最大值和最小值
  13. Point minIdx, maxIdx; ////用于存放矩阵中的最大值和最小值在矩阵中的位置
  14. /*寻找单通道矩阵中的最值*/
  15. minMaxLoc(img, &minVal, &maxVal, &minIdx, &maxIdx);
  16. cout << "img中最大值是:" << maxVal << " " << "在矩阵中的位置:" << maxIdx << endl;
  17. cout << "img中最小值是:" << minVal << " " << "在矩阵中的位置:" << minIdx << endl;
  18. /*寻找多通道矩阵中的最值*/
  19. Mat imgs_re = imgs.reshape(1, 4); //将多通道矩阵变成单通道矩阵
  20. minMaxLoc(imgs_re, &minVal, &maxVal, &minIdx, &maxIdx);
  21. cout << "imgs中最大值是:" << maxVal << " " << "在矩阵中的位置:" << maxIdx << endl;
  22. cout << "imgs中最小值是:" << minVal << " " << "在矩阵中的位置:" << minIdx << endl;
  23. return 0;
  24. }

2.计算图像的平均值和标准差

  1. #include <opencv2\opencv.hpp>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. using namespace cv;
  6. int main()
  7. {
  8. system("color F0"); //更改输出界面颜色
  9. float a[12] = { 1, 2, 3, 4, 5, 10, 6, 7, 8, 9, 10, 0 };
  10. Mat img = Mat(3, 4, CV_32FC1, a); //单通道矩阵
  11. Mat imgs = Mat(2, 3, CV_32FC2, a); //多通道矩阵
  12. cout << "/* 用meanStdDev同时求取图像的均值和标准差 */" << endl;
  13. Scalar myMean;
  14. myMean = mean(imgs);
  15. cout << "imgs均值=" << myMean << endl;
  16. cout << "imgs第一个通道的均值=" << myMean[0] << " "
  17. << "imgs第二个通道的均值=" << myMean[1] << endl << endl;
  18. cout << "/* 用meanStdDev同时求取图像的均值和标准差 */" << endl;
  19. Mat myMeanMat, myStddevMat;
  20. meanStdDev(img, myMeanMat, myStddevMat);
  21. cout << "img均值=" << myMeanMat << " " << endl;
  22. cout << "img标准差=" << myStddevMat << endl << endl;
  23. meanStdDev(imgs, myMeanMat, myStddevMat);
  24. cout << "imgs均值=" << myMeanMat << " " << endl << endl;
  25. cout << "imgs标准差=" << myStddevMat << endl;
  26. return 0;
  27. }

3.两图像的比较运算

  1. #include <opencv2\opencv.hpp>
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5. using namespace cv;
  6. int main()
  7. {
  8. float a[12] = { 1, 2, 3.3, 4, 5, 9, 5, 7, 8.2, 9, 10, 2 };
  9. float b[12] = { 1, 2.2, 3, 1, 3, 10, 6, 7, 8, 9.3, 10, 1 };
  10. Mat imga = Mat(3, 4, CV_32FC1, a);
  11. Mat imgb = Mat(3, 4, CV_32FC1, b);
  12. Mat imgas = Mat(2, 3, CV_32FC2, a);
  13. Mat imgbs = Mat(2, 3, CV_32FC2, b);
  14. //对两个单通道矩阵进行比较运算
  15. Mat myMax, myMin;
  16. max(imga, imgb, myMax);
  17. min(imga, imgb, myMin);
  18. //对两个多通道矩阵进行比较运算
  19. Mat myMaxs, myMins;
  20. max(imgas, imgbs, myMaxs);
  21. min(imgas, imgbs, myMins);
  22. //对两张彩色图像进行比较运算
  23. Mat img0 = imread("len.png");
  24. Mat img1 = imread("noobcv.jpg");
  25. if (img0.empty() || img1.empty())
  26. {
  27. cout << "请确认图像文件名称是否正确" << endl;
  28. return -1;
  29. }
  30. Mat comMin, comMax;
  31. max(img0, img1, comMax);
  32. min(img0, img1, comMin);
  33. imshow("comMin", comMin);
  34. imshow("comMax", comMax);
  35. //与掩模进行比较运算
  36. Mat src1 = Mat::zeros(Size(512, 512), CV_8UC3);
  37. Rect rect(100, 100, 300, 300);
  38. src1(rect) = Scalar(255, 255, 255); //生成一个低通300*300的掩模
  39. Mat comsrc1, comsrc2;
  40. min(img0, src1, comsrc1);
  41. imshow("comsrc1", comsrc1);
  42. Mat src2 = Mat(512, 512, CV_8UC3, Scalar(0, 0, 255)); //生成一个显示红色通道的低通掩模
  43. min(img0, src2, comsrc2);
  44. imshow("comsrc2", comsrc2);
  45. //对两张灰度图像进行比较运算
  46. Mat img0G, img1G, comMinG, comMaxG;
  47. cvtColor(img0, img0G, COLOR_BGR2GRAY);
  48. cvtColor(img1, img1G, COLOR_BGR2GRAY);
  49. max(img0G, img1G, comMaxG);
  50. min(img0G, img1G, comMinG);
  51. imshow("comMinG", comMinG);
  52. imshow("comMaxG", comMaxG);
  53. waitKey(0);
  54. return 0;
  55. }