OpenCV:如何调整捕获大小?

时间:2014-07-29 08:26:30

标签: c++ opencv

我试图以完全相同的大小显示捕获。我试过这个:

// 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);

这些都不起作用。知道如何正确调整大小吗?

3 个答案:

答案 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)