实现暗通道的C++程序问题

冰不语
博客专家认证
2016-01-16 10:58:32
C++初学,最近在试图实现以下何凯明的暗通道先验算法,在求暗通道的时候遇到暂时解决不了的问题了,请前辈们看看怎么回事。
#include<opencv2\opencv.hpp>
#include<opencv2\core\core.hpp>
#include<opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

void minRGB(Mat img1,Mat img2)
{
int row = img1.rows;
int col = img1.cols;
for(int j=0;j<row;j++){
for(int i=0;i<col;i++){
uchar min;
img1.at<cv::Vec3b>(j,i)[0] >= img1.at<cv::Vec3b>(j,i)[1]?min=img1.at<cv::Vec3b>(j,i)[1]:
min=img1.at<cv::Vec3b>(j,i)[0];

if(min>=img1.at<cv::Vec3b>(j,i)[2])
min=img1.at<cv::Vec3b>(j,i)[2];
img2.at<uchar>(j,i)=min;
}
}
}

void minROI(Mat &img,Mat &outImg)
{
int p=3;
//cout << "请输入模板尺度:" << endl;
//cin >> p;

uchar mmin=255;
for(int i=0; i<img.rows;++i)
{
for(int j=0; j<img.cols;++j)
{
Mat imgROI = img(Rect(i,j,p,p));

for(int m=0; m < p;++m)
{
for(int n=0; n < p; ++n)
{
if(mmin > imgROI.at<uchar>(m,n))
{
mmin = imgROI.at<uchar>(m,n);
}
}
}
out.at<uchar>(i,j) =mmin;
}

}
}

int main()
{
Mat img1;
img1 = imread("mai1.jpg",1);
//resize(img1,img1,Size(100,100),0,0,1);
int row = img1.rows;
int col = img1.cols;
int channel = img1.channels();
Mat img2(img1.rows,img1.cols,CV_8UC1);
Mat img3(img2.size(),CV_8UC1);

minRGB(img1,img2);
minROI(img2,img3);

imshow("原图",img1);
imshow("暗通道1",img2);
imshow("暗通道2",img3);
waitKey(0);

return 0;
}



运行报错如下图:


应该是下面这句的错误:
if(mmin > imgROI.at<uchar>(m,n))
{
mmin = imgROI.at<uchar>(m,n);
}

可是不知道怎么改?求前辈指点
...全文
172 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
冰不语 2016-01-19
  • 打赏
  • 举报
回复
可能是C++基础太弱了,还没搞定。。
赵4老师 2016-01-18
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
paschen 版主 2016-01-17
  • 打赏
  • 举报
回复
点中断那个按钮,然后通过调用堆栈、变量窗口等观察分析原因

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧