【发布时间】:2011-03-30 16:30:31
【问题描述】:
我有一个奇怪的问题。如果我在图像上使用 cvCvtColor,它可以工作,但如果我想修改该图像并在其上使用 cvCvtColor,则会出现错误:
OpenCV 错误:输入参数的大小 不匹配 () 在 cvCvtColor, 文件 /build/buildd-opencv_2.1.0-3-i386-PaiiLK/opencv-2.1.0/src/cv/cvcolor.cpp, 第 2208 行终止后调用 抛出一个实例 'cv::异常'
不应该有这个错误,因为我有输出:
targetImage->width =300, targetImage->height =300 cap->width =300, 上限->高度 =300
即:大小相同。所以是废话。。 任何可能的解决方案的想法?
相关代码在这里:
printf("\ntargetImage->width =%d, targetImage->height =%d ",targetImage->width,targetImage->height );
cap = cvCreateImage(cvSize(targetImage->width,targetImage->height), IPL_DEPTH_8U, 1);
cvCvtColor(targetImage, cap, CV_BGR2GRAY);//HERE NO PROBLEM
CvRect xargetRect = cvRect(0,0,300,300);
subImage(targetImage, &showImg, xargetRect);
cap = cvCreateImage(cvSize(targetImage->width,targetImage->height), IPL_DEPTH_8U, 1);
printf("\ntargetImage->width =%d, targetImage->height =%d ",targetImage->width,targetImage->height );
printf("\ncap->width =%d, cap->height =%d ",cap->width,cap->height );
cvCvtColor(targetImage, cap, CV_BGR2GRAY); //HERE THE PROBLEM
谢谢
这是子图代码:
/// Modifies an already allocated image header to map
/// a subwindow inside another image.
inline void subImage(IplImage *dest, const IplImage *orig, const CvRect &r) {
dest->width = r.width;
dest->height = r.height;
dest->imageSize = r.height * orig->widthStep;
dest->imageData = orig->imageData + r.y * orig->widthStep + r.x * orig->nChannels;
dest->widthStep = orig->widthStep;
dest->roi = NULL;
dest->nSize = sizeof(IplImage);
dest->depth = orig->depth;
dest->nChannels = orig->nChannels;
dest->dataOrder = IPL_DATA_ORDER_PIXEL;
}
【问题讨论】:
-
能贴出subImage的代码吗?
-
我刚刚看到你的评论,抱歉耽搁了;)
-
我认为您的
widthStep和imageSize都不正确,由于子窗口,您将不得不根据新图像的尺寸重新计算。 -
另见this example获取子图像的一些不同代码。