我试图以完全相同的大小显示捕获。我试过这个:
// in the class.h
cv::Mat frame;
cv::VideoCapture capture;
我现在尝试了几种解决方案:
// Number 1: The size doesn't change at all.
this->capture.open(0);
or
this->capture.open(filename);
this->capture.set(CV_CAP_PROP_FRAME_WIDTH, 800);
this->capture.set(CV_CAP_PROP_FRAME_HEIGHT, 600);
-
// Number 2: Exception
this->capture.open(0);
or
this->capture.open(filename);
this->capture.read(this->frame);
if (!this->frame.empty())
cv::resize(this->frame, this->frame, cv::Size(800, 600));
-
// Number 3: Exception
this->capture.open(0);
or
this->capture.open(filename);
cv::resize(this->frame, this->frame, cv::Size(800, 600));
this->capture.read(this->frame);
这些都不起作用。知道如何正确调整大小吗?
答案 0 :(得分:4)
对于函数capture.set()
,只有一些选项适用于某些输入格式。这意味着例如您无法为电影文件设置FPS,但您可以跳到某个帧。另一方面,在相机输入上你可以完全相反。
因此,如果您在加载电影时尝试更改输入图像的大小,则必须使用cv::resize()
。如果要加载相机输入,则可能是相机不支持此分辨率。看看你是否可以通过其他程序以这种尺寸从这款相机获取图像。
您可以通过以下方式使用cv::resize()
:
this->capture.open(0);
if(this->campture.isOpen()){
this->capture.read(this->frame);
if (!this->frame.empty()){
cv::Mat resized;
cv::resize(this->frame, resized, cv::Size(800, 600));
cv::imshow("resized",resized);
} else std::cout<<"No input frame!"<<std::endl;
cv::waitKey(5);
} else std::cout<<"No camera detected!"<<std::endl;
答案 1 :(得分:1)
我认为您不能调整捕获大小,或者至少不能像您尝试过的那样。 set
函数用于设置属性(宽度,高度等),而不是调整它的大小。
我建议您获取框架并调整每个框架的大小:
while (true)
{
cv::Mat frame;
this->capture >> frame;
if (frame.empty()) break;
cv::resize(frame, frame, sizeYouWant);
// ...
}
答案 2 :(得分:0)
frame = cv2.resize(old_frame, None, fx=0.4, fy=0.4, interpolation=cv2.INTER_LINEAR)