Tôi đang cố gắng sử dụng cv::calcOpticalFlowPyrLK
nhưng đôi khi một xác nhận nội bộ trong hàm đó không thành công. Xác nhận là npoints = prevPtsMat.checkVector(2, CV_32F, true)) >= 0
. Tôi đang sử dụng OpenCV 2.3.1. Mã nguồn cho chức năng này có sẵn here.cv :: goodFeaturesToTrack không trả lại bất kỳ tính năng nào
Thật khó để quấn đầu của tôi xung quanh mã của họ, đặc biệt là vì kinh nghiệm hạn chế của tôi với đồ họa máy tính và thiếu nhận xét của họ. Tại sao xác nhận này được kích hoạt và nó nói gì về vấn đề của tôi?
Sửa: Tôi gọi hàm như sau:
cv::calcOpticalFlowPyrLK(curBwFrame, prvFrame, features, newFeatures, trackingStatus, errors);
tôi phát hiện ra rằng features
vector, mà được thu thập bằng cách gọi cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
với một mặt nạ không có sản phẩm nào đó dường như là đủ lớn và một hình ảnh hợp lệ, không chứa bất kỳ tính năng nào. Làm thế nào điều này có thể xảy ra?
curBwFrame
skinMask
tôi có thể tạo lại vấn đề bằng cách sử dụng đoạn mã sau:
#include <vector>
#include <cassert>
#include <opencv2\opencv.hpp>
using std::vector;
using namespace cv;
int main() {
vector<Point2f> features;
cv::Mat curBwFrame = imread("curBwFrame.png");
cv::cvtColor(curBwFrame, curBwFrame, CV_RGB2GRAY);
imwrite("test.png", curBwFrame);
cv::Mat skinMask = imread("skinMask.png");
cv::cvtColor(skinMask, skinMask, CV_RGB2GRAY);
imwrite("test.png", skinMask);
cv::goodFeaturesToTrack(curBwFrame, features, 5, 0.2, 0.5, skinMask);
assert(features.size() > 0);
return 0;
}
Các khẳng định kiểm tra rằng lý lẽ đầu vào là một vectơ của các điểm. Và thật khó để trả lời câu hỏi của bạn mà không có mã của bạn. –
Tôi đã thêm thông tin ở trên, nhưng tôi không chắc chắn những thông tin khác có thể có liên quan. Tôi có thể đổ một số đoạn mã lớn ở đây nhưng chúng có thể chứa rất nhiều thông tin không liên quan. – Pieter
Xin lỗi về việc tôi trộn một số cuộc gọi chức năng trước đó. Tôi đã thêm đoạn mã chính xác ở trên! Tôi cũng có thể đăng mặt nạ và hình ảnh nguồn cho 'goodFeaturesToTrack' nếu cần. – Pieter