Opencv Ошибка, чтобы обрезать изображение в iPhone

Я использовал приведенный ниже код, чтобы установить ROI и обрезать изображение.

cv::Mat testMat = [CaptureViewController cvMatWithImage:self.storeImage];
cv::Rect roi(faces[i].x, faces[i].y, faces[i].width, faces[i].height);
cv :: Mat image_roi;
image_roi = testMat ( roi );

self.CroppedImage = [CaptureViewController imageWithCVMat:image_roi];
UIImageWriteToSavedPhotosAlbum(self.CroppedImage, self,  nil,nil);

Но я получаю ошибку ниже:

<Error>: CGContextDrawImage: invalid context 0x0
OpenCV Error: Assertion failed (0 <= roi.x && 0 <= roi.width && roi.x + roi.width <= m.cols && 0 <= roi.y && 0 <= roi.height && roi.y + roi.height <= m.rows)

Я установил точку останова и проверил здесь, где я получаю вышеуказанную ошибку image_roi = testMat ( roi );,

Но я не мог отследить причину этой проблемы. Я ошибаюсь где-нибудь в приведенном выше коде?

2 ответа

Попробуйте клонировать () объект.

image_roi = testMat(roi).clone();

Я знаю, что уже слишком поздно, чтобы ответить на этот вопрос, но, возможно, это поможет кому-то еще сталкиваться с подобной проблемой. Ошибка кажется довольно информативной. Это говорит о том, что ваш прямоугольник roi (область интереса), кажется, выходит за пределы cv::Mat.

Убедитесь, что (левый верхний x, левый верхний y, ширина, высота) попадают в границы вашего testMat:

faces[i].x = faces[i].x >= 0 ? faces[i].x : 0;
faces[i].y = faces[i].y >= 0 ? faces[i].y : 0;
faces[i].width = faces[i].x + faces[i].width > testMat.cols ? testMat.cols - faces[i].x : faces[i].width;
faces[i].height = faces[i].y + faces[i].height > testMat.rows ? testMat.rows - faces[i].y : faces[i].height;
Другие вопросы по тегам