2014-09-29 3 views
0

Я использую визуальную студию 2012 с opencv 3.0. я уже проверил несколько постов об этой проблеме, но до сих пор я получаю утверждение не удалось ошибка -215, когда я запускаю этот код:Утверждение не выполнено ROI opencv

IplImage * imageOriginal = cvLoadImage("road1.jpg"); 

int width = 0, height = 0;  
width = imageOriginal->width; 
height = imageOriginal->height; 
IplImage* img = cvCreateImage(cvGetSize(imageOriginal), imageOriginal->depth , 3);  

CvRect cropRect = cvRect(0, 0, width -10, height -10); // ROI in source image 

cvSetImageROI(imageOriginal, cropRect); 

try { 
    cvCopy(imageOriginal, img, NULL); // Copies only crop region 
} 
catch (cv::Exception& e) { 
    cout << e.what() << endl; 
} 
cvResetImageROI(imageOriginal); 
cvShowImage("Original ROI", img); 
waitKey(); 

Если я оставлю прямоугольник быть полным размером CvRect cropRect = cvRect(0, 0, width, height); я не получаю сообщение об ошибке. В чем проблема?

+1

Вы уверены, что ваша ширина и высота не менее 10. Если они, то есть эффективная высота и ширина для обрезанной области будут меньше или равны 0, а это, возможно, почему вы видите ошибку утверждения. –

+0

Вы проверили для nullptr во всех своих нагрузках/созданиях? если ширина равна 0, вы получаете -10 в вашем текущем коде. – Surt

+0

Почему вы не играете с cvRect вообще, измените третий и четвертый параметры и посмотрите, в какой момент вы получите сообщение об ошибке. Удалите все остальные коды. Попробуйте cvRect (0, 0, 100, 100); затем cvRect (0, 0, 200, 200); так что –

ответ

0

ваш код от opencv1.0. (Это было давно)

пожалуйста, для opencv3.0, используйте C++ API вместо:

#include <opencv2/core.hpp> 
#include <opencv2/imgcodecs.hpp> 
#include <opencv2/highgui.hpp> 
using namespace cv; 

int main() { 
    Mat img = imread("road1.jpg"); 
    Mat roi = img(Rect(0,0,img.cols-10,img.rows-10)); 
    imshow("hi",roi); 
    return waitKey(); 
} 
+0

Я должен использовать Iplimage как структуру данных, потому что он будет использоваться в другом месте этого кода. – Elod

+0

вы * не должны *. (обсуждений не будет) – berak

+0

ОК, а точнее: мне нужно создать модуль для RTMaps, в котором используется программный инструмент ТОЛЬКО Iplimage. Поэтому я должен использовать Iplimage, чтобы мой код был чистым и использовался в RTMaps. Извините, если я обижу ваши чувства @berak. В любом случае спасибо за помощь ур, но я не могу это нас найти. – Elod

Смежные вопросы