opencv VideoCapture::set函数设置视频帧高、宽的一些问题(小白求解!)

文章讨论了在使用OpenCV时,尝试通过set函数设置USB摄像头和笔记本摄像头的像素宽度和高度时遇到的问题。USB摄像头可以等比例缩小像素,但放大时失败;而笔记本摄像头无论缩放都无法成功。作者寻求解答可能的原因。

问题:

set函数设置图像宽高,函数返回值显示设置成功,但当我用get函数查看的时候发现并未设置成功

测试条件:

一个usb摄像头(opencv打开默认像素为640*480),笔记本自带一个摄像头(opencv默认打开是2592*1944)

测试结果:

usb摄像头可以等比例的缩小像素(如设置成320*240,160*120都是成功的,但是等比例放大,如1280*960则是不行的),但是笔记本自带的摄像头就算是等比例缩小也不行

这是为什么?求大佬解答!

### OpenCV C++ 使用教程和文档 #### 获取视频帧 `cv::VideoCapture` 类提供了读取视频文件或摄像头的功能。通过 `grab()` 方法获取下一帧,使用 `retrieve()` 提取该帧至矩阵对象中。也可以直接调用 `read()` 合并这两个操作。另外,可以通过 `get(int propId)` 函数查询当前捕获属性的状态。 ```cpp #include <opencv2/opencv.hpp> int main() { cv::VideoCapture cap(0); if (!cap.isOpened()) return -1; while (true) { cv::Mat frame; cap >> frame; // read a new frame from video if (frame.empty()) break; imshow("Frame", frame); char c = (char)waitKey(33); if (c == 27) break; } return 0; } ``` 此代码展示了如何打开默认摄像设备,并持续显示每一帧直到按下ESC键退出循环[^1]。 #### 图像处理——水平拼接图片 对于图像的操作,OpenCV提供了一系列函数用于加载、保存以及变换图像数据。例如要将两张图片横向排列在一起,则可采用 `cv::hconcat()` 函数完成这项工作: ```cpp #include <opencv2/opencv.hpp> using namespace std; using namespace cv; int main(){ Mat img1 = imread("path_to_image1"); Mat img2 = imread("path_to_image2"); vector<Mat> images{img1, img2}; Mat concatenatedImage; hconcat(images, concatenatedImage); namedWindow("Concatenated Image", WINDOW_AUTOSIZE ); imshow("Concatenated Image", concatenatedImage ); waitKey(0); destroyAllWindows(); return 0; } ``` 上述程序实现了两个输入图像的简单连接展示[^2]。 #### 构建环境设置-CMake集成 为了简化多平台项目的构建流程,推荐使用CMake作为自动化工具来管理依赖项及生成相应的编译脚本。创建一个名为 `CMakeLists.txt` 的文本文件,在其中定义项目名称、版本号、所需模块以及其他必要的配置选项。 ```cmake cmake_minimum_required(VERSION 3.8) project(MyProject) set(CMAKE_CXX_STANDARD 11) find_package(OpenCV REQUIRED) include_directories(${OpenCV_INCLUDE_DIRS}) add_executable(myapp src/main.cpp) target_link_libraries(myapp ${OpenCV_LIBS}) ``` 这段CMake脚本指定了最低要求版本为3.8,并设置了C++标准为11;接着寻找安装好的OpenCV库路径以便链接时引用[^3]。 #### 文档扫描功能实现细节 当涉及到更复杂的计算机视觉任务如文档扫描仪效果模拟时,可能需要用到几何变换技术。比如计算两条直线之间的交点位置就可以帮助定位页面角落从而进行透视校正。 ```cpp Point2f linesIntersect(double b1, double b2, double k1, double k2){ double x, y; x = abs((b2 - b1)/(k1 - k2)); y = abs(((k1*b2)-(k2*b1))/(k2-k1)); return Point2f(x,y); } ``` 这里给出了一种方法用来求解给定斜率和截距形式表示的两线段交叉处坐标值[^4]。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值