因为是个小白昨晚照书上写了一个两个矩阵或者图像进行比较运算
#include
#include
#includeusing namespace std;
using namespace cv;
int main()
{
double a[12] = {1,2,3.3,4,5,9,5,7,8.2,9,10,2};
double b[12] = {1,2.2,3,1,3,10,6,7,8,9.3,10,1};
Mat imga = Mat(3, 4, CV_32FC1, a);
Mat imgb = Mat(3, 4, CV_32FC1, b);
Mat imgas = Mat(2, 3, CV_32FC2, a);
Mat imgbs = Mat(2, 3, CV_32FC2, b);
//对两个单通道矩阵进行比较运算
Mat myMax, myMin;
max(imga, imgb, myMax);
min(imga, imgb, myMin);
//对两个多通道矩阵进行比较运算
Mat myMaxs, myMins;
max(imgas, imgbs, myMaxs);
min(imgas, imgbs, myMins);
Mat img0 = imread("D:\\image\\1.jpg");
Mat img1 = imread("D:\\image\\2.jpg");
//imshow("img0", img0);
//imshow("img1", img1);
//waitKey(0);
if (img0.empty() || img1.empty())
{
cout << "输错了文件" << endl;
return -1;
}
Mat comMin,comMax;
cv::max(img0,img1,comMax);
cv::min(img0,img1,comMin);
imshow("comMin",comMin);
imshow("comMax", comMax);
//与掩膜进行比较
Mat src1 = Mat::zeros(Size(512,512), CV_8UC3);
Rect rect(100, 100, 300, 300);
src1(rect) = Scalar(255, 255, 255);
Mat comsrc1, comsrc2;
min(img0, src1, comsrc1);
imshow("comsrc1",comsrc1);
Mat src2 = Mat(512, 512, CV_8UC3, Scalar(0, 0, 255));
min(img0, src2, comsrc2);
imshow("comsrc2", comsrc2);
Mat img0G, img1G, comMinG, comMaxG;
cvtColor(img0, img0G, COLOR_BGR2GRAY);
cvtColor(img1, img1G, COLOR_BGR2GRAY);
max(img0G, img1G, comMaxG);
min(img0G, img1G, comMinG);
imshow("comMinG", comMinG);
imshow("comMaxG", comMaxG);
waitKey(0);
return 0;
}
运行时老出现中断,结合查阅的资料大概分为3种情况:
1.图片路径错误。
解决方法:可以添加绝对路径,绝对路径注意把“\”改为"\\";
2。环境配置错误。
解决方法:在debug模式下 附加依赖项改为opencv_world451d.lib
如图:

文章图片
如果是release 就是 opencv_world451.lib
PS.好像是这样的 具体可以再参考一下别人的文章,因为我不是这样解决的。
3.我的问题就出在这里!!!
两个矩阵/图像大小不一致!!
我的1号图是512*512的 2号图1024*1024 不能比呀!!!!
必须要保证你图大小一致才能比!!!
【c++|有未经处理的异常: Microsoft C++ 异常: cv::Exception】最后再检查一遍你的代码有没有打错!!也很重要!!!!!!
推荐阅读
- c语言|十进制转换为二进制,二进制中1的个数
- 图形图像|OpenCV 视频入门
- C++|【C++】模板初阶
- C++|【C++】类和对象(上篇)
- C++|【C++】内存管理
- 引力计划|C++-万能引用模板与完美转发测试
- Linux|给自己一首歌的时间学习来Linux基本开发工具
- c语言|C语言——指针初识(三)(指针和指针数组,一级指针,二级指针详解)
- 指针|C语言中的数组指针和指针数组的区别,代码+图例详解