У меня странная проблема.Если я использую cvCvtColor для изображения, оно работает, но если я хочу изменить это изображение и использовать cvCvtColor для него, возникает ошибка:
Ошибка OpenCV: размеры входных аргументов не совпадают () в cvCvtColor, файл /build/buildd-opencv_2.1.0-3-i386-PaiiLK/opencv-2.1.0/src/cv/cvcolor.cpp, строка 2208 завершается, вызывается после создания экземпляра 'cv :: Exception'
Не должно быть этой ошибки, потому что у меня есть вывод:
targetImage-> width = 300, targetImage-> height = 300 cap-> width = 300, cap->высота = 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;
}