opencv 执行cv::split()函数时报错.

voidDehazor::GenerateDarkImage(){MatrawImage=imread("E:\\tempimage\\1.bmp",CV_LOAD_IM... void Dehazor::GenerateDarkImage()
{
Mat rawImage= imread("E:\\tempimage\\1.bmp",CV_LOAD_IMAGE_COLOR);

int col = rawImage.cols;

int row = rawImage.rows;

cv::Mat tempdark = cv::Mat(row,col,CV_8UC1);

std::vector<cv::Mat > channelLayers;

cv::split(rawImage,channelLayers);

//cv::Mat rawImage_r;cv::Mat rawImage_g;cv::Mat rawImage_b;必须是连续的

int ncol = row*col;

int nrow = 1;

for(int i = 0; i < nrow; ++i)

{

uchar* p0 = channelLayers[0].ptr();

uchar* p1 = channelLayers[1].ptr();

uchar* p2 = channelLayers[2].ptr();

uchar* pdark = tempdark.ptr();

for (int j = 0; j < ncol; ++j)

{

uchar temp = ((p0[j]<p1[j])?p0[j]:p1[j]);

pdark[j] = ((temp<p2[j])?temp:p2[j]);

}

}

minFilter(tempdark);

cv::imshow("dark",darkChannelImage);
}
并在release条件写可以通过,可得debug就不行。
展开
 我来答
WM_THU
2014-03-21 · TA获得超过7164个赞
知道大有可为答主
回答量:4285
采纳率:80%
帮助的人:3932万
展开全部
看起来split函数没有用错。你是如何肯定是哪里出错的?
只有debug出错说明是指针操作有异常。
uchar* p0 = channelLayers[0].ptr();
uchar* p1 = channelLayers[1].ptr();
uchar* p2 = channelLayers[2].ptr();
uchar* pdark = tempdark.ptr();
这四行能解释一下吗?为何看起来很循环变量 i 毫无关系?
徐剧终
2016-10-14
知道答主
回答量:6
采纳率:0%
帮助的人:7186
展开全部
我今天也是利用split函数,使用方法均正确还是出错,始终查不出来为什么出错。后来改了opencv的版本才可以,是你使用的opencv版本的问题。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式