编译出错detector = cv::FeatureDetector::create("ORB");

博客主要讲述执行语句时出现错误,原因是OpenCV 3.X以上版本语法更改。给出两种解决方法,一是降低OpenCV版本,在cmakelist中指定版本后重新编译;二是改写代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

执行语句

detector = cv::FeatureDetector::create("ORB");

出现错误如下:

error: ‘create’ is not a member of ‘cv::FeatureDetector {aka cv::Feature2D}

opencv版本问题,3.X以上语法更改,解决方法有两种,
方法一: 降OpenCV版本,cmakelist中opencv版本指定:

find_package(OpenCV 2.4 REQUIRED)

重新编译

cd build
cmake ..
make

方法二:改写

cv::Ptr<cv::FeatureDetector> detector = cv::ORB::create();
cv::Ptr<cv::DescriptorExtractor> descriptor = cv::ORB::create();
#include <opencv2/opencv.hpp> #include <iostream> #include <vector> int main() { // 使用视频路径 const char* videoPath = "/home/shiyuyang/下载/699pic_03mcyp_spxy.mp4"; // 打印开始信息 std::cout << "开始读取视频:" << videoPath << std::endl; // 尝试打开视频 cv::VideoCapture cap(videoPath); // 检查是否成功打开 if (!cap.isOpened()) { std::cerr << "无法打开视频\n"; std::cerr << "请检查:\n"; std::cerr << "1. 文件路径是否正确:" << videoPath << "\n"; std::cerr << "2. 文件是否存在\n"; std::cerr << "3. 是否有正确的访问权限\n"; std::cerr << "4. OpenCV是否支持该视频格式\n"; return -1; } // 读取视频属性 double fps = cap.get(cv::CAP_PROP_FPS); int width = (int)cap.get(cv::CAP_PROP_FRAME_WIDTH); int height = (int)cap.get(cv::CAP_PROP_FRAME_HEIGHT); int totalFrames = (int)cap.get(cv::CAP_PROP_FRAME_COUNT); // 打印视频信息 std::cout << "成功打开视频!" << std::endl; std::cout << "视频信息:" << std::endl; std::cout << "- 文件路径:" << videoPath << std::endl; std::cout << "- 帧率:" << fps << " FPS" << std::endl; std::cout << "- 分辨率:" << width << "x" << height << std::endl; std::cout << "- 总帧数:" << totalFrames << std::endl; std::cout << "- 预计播放时长:" << (totalFrames / fps) << " 秒" << std::endl; // 创建窗口 cv::namedWindow("Video Playback", cv::WINDOW_NORMAL); cv::namedWindow("ORB Features", cv::WINDOW_NORMAL); cv::namedWindow("Optical Flow", cv::WINDOW_NORMAL); // 在这里添加窗口位置和大小设置 cv::moveWindow("Video Playback", 50, 50); cv::moveWindow("ORB Features", 400, 50); cv::moveWindow("Optical Flow", 750, 50); // 设置窗口大小 cv::resizeWindow("Video Playback", 320, 240); cv::resizeWindow("ORB Features", 320, 240); cv::resizeWindow("Optical Flow", 320, 240); // 创建ORB特征检测器 cv::Ptr<cv::ORB> detector = cv::ORB::create(500); // 最多检测500个特征点 // 光流参数设置 cv::Mat prevGray; std::vector<cv::KeyPoint> prevKeypoints; std::vector<cv::Point2f> prevPoints;
03-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值