Я пытаюсь создать прямоугольную область интереса поверх видео с веб-камеры. Но этот код дает сбой
#include "opencv2/opencv.hpp"
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
using namespace cv;
int main(){
VideoCapture cap(0);
if(!cap.isOpened()){
cout << "Error opening video stream or file" << endl;
return -1;
}
Rect Roi(1,1,100,200);
while(1){
Mat frame;
cap >> frame;
frame.copyTo(frame(Roi));
// If the frame is empty, break immediately
if (frame.empty())
break;
// Display the resulting frame
imshow( "Frame", frame );
moveWindow("Frame",500,100);
// Press ESC on keyboard to exit
char c=(char)waitKey(25);
if(c==27)
break;
}
cap.release();
destroyAllWindows();
return 0;
}
// g++ cam_roi.cpp pkg-config --cflags --libs opencv4
; ./a.out
ОШИБКА ==> [WARN:0] глобальный ../modules/videoio/src/cap_gstreamer.cpp (961) открыть OpenCV | Предупреждение GStreamer: невозможно запросить позицию видео: статус=0, значение=-1, продолжительность=-1 завершение вызывается после создания экземпляра 'cv::Exception' what(): OpenCV(4.5.1) ../modules/core/src/matrix_wrap.cpp:1188: ошибка: (-215: утверждение не выполнено) !fixedSize() || ((Mat*)obj)->size.operator()() == Size(_cols, _rows) в функции 'create'
Прервано
frame.copyTo(frame(Roi));
бессмысленно.frame(Roi)
— это меньшая область, и это «представление». вы не можете копировать в представления с другим размером. Вы оцените полный ответ?@ChristophRackwitz Пожалуйста, ответьте, я приму это
это по-прежнему не включает «рисование» прямоугольника (например, с помощью
cv::rectangle
), а берет подобласть из изображения. Я бы рекомендовал отредактировать заголовок вашего вопроса, чтобы облегчить поиск контента.