OpenCV:如何调整捕获的大小?

新手上路,请多包涵

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

 // in the class.h
cv::Mat frame;
cv::VideoCapture capture;

我现在尝试了几种解决方案。

数字 1:大小根本没有变化。

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

2号:例外。

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

第三个:例外。

 this->capture.open(0);
or
this->capture.open(filename);

cv::resize(this->frame, this->frame, cv::Size(800, 600));
this->capture.read(this->frame);

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

原文由 Romain 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 360
1 个回答

对于函数 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;

原文由 diip_thomas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题