[英]Opencv 2.4.12_2 calcOpticalFlowPyrLK() Error
我正在嘗試使用OpenCV的calcOpticalFlowPyrLK()函數,我似乎無法通過此錯誤:
OpenCV錯誤:斷言失敗(mtype == type0 ||(CV_MAT_CN(mtype)== CV_MAT_CN(type0)&&((1 << type0)&fixedDepthMask)!= 0))在create,file / tmp / opencv20160107-21708- lubvml / opencv-2.4.12 / modules / core / src / matrix.cpp,line 1486 libc ++ abi.dylib:以cv類型的未捕獲異常終止::異常:/tmp/opencv20160107-21708-lubvml/opencv-2.4 .12 / modules / core / src / matrix.cpp:1486:錯誤:(-215)mtype == type0 || (CV_MAT_CN(mtype)== CV_MAT_CN(type0)&&((1 << type0)&fixedDepthMask)!= 0)在函數創建中
我檢查了輸入參數,兩個圖像都是:大小:[1280 x 720]深度:(CV_8U)
這是代碼:
Mat frame;
Mat back;
Mat fore;
Mat temp;
Mat prevImage;
Mat currImage;
// for floodfill
Point seed = Point(0,0);
VideoCapture cap("./Sequence2/Sequence_03_%03d.jpg");
// Background subtraction
BackgroundSubtractorMOG2 bg;
bg.set("nmixtures",5);
bg.set("detectShadows", true);
bg.set("fTau", 0.5);
//
bool foundpoints = false;
vector<uchar> status, err;
// Blob Detector
SimpleBlobDetector::Params params;
//params.filterByColor = true;
//params.blobColor = 255; // use if bitwise not statement used
// // Filter by Area.
params.filterByArea = true; //size
params.minArea = 25;
params.maxArea = 300;
params.filterByCircularity = true; // circle or not
params.minCircularity = 0.15;
params.filterByConvexity = true; // closed or not
params.minConvexity = 0.92;
params.filterByInertia = true; // elongated or not
params.minInertiaRatio = 0.40;
SimpleBlobDetector detector(params);
//
std::vector<std::vector<Point> > contours;
std::vector<KeyPoint> keypoints;
std::vector<Point2f> pKeypoints, prevKeypoints;
namedWindow("Video");
//namedWindow("Background");
for (int i = 0; i < 623; i++) {
file << "./Output3/image" << i << ".jpg";
cap >> frame;
// CONVERT TO GRAY
cvtColor(frame, temp, CV_RGB2GRAY);
//adaptiveThreshold(frame,temp,1,ADAPTIVE_THRESH_MEAN_C,THRESH_BINARY,3,1);
bg.operator ()(temp,fore);
//bg.getBackgroundImage(back);
// THREHOLD THE IMAGE
threshold(fore,fore,80,150,THRESH_TOZERO);
erode(fore,fore,cv::Mat());
dilate(fore,fore,cv::Mat());
findContours(fore,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);
// REMOVE SOME NOISE
cv::floodFill(fore, seed,(255));
erode(fore,fore,cv::Mat());
dilate(fore,fore,cv::Mat());
//bitwise_not(fore,fore);
erode(fore,fore,cv::Mat());
dilate(fore,fore,cv::Mat());
detector.detect(fore, keypoints);
//std::cout << keypoints.size() << "\n";
if (keypoints.size() > 0){
if (foundpoints == false)
foundpoints = true;
else{
cv::Size winsize = fore.size();
KeyPoint::convert(keypoints,pKeypoints);
// std::cout << pKeypoints.size() << " , " << prevKeypoints.size() << " , " << prevImage.depth() << " , "<< fore.depth();
calcOpticalFlowPyrLK(prevImage,fore,prevKeypoints,pKeypoints,status,err,winsize);
prevImage.pop_back();
}
prevImage.push_back(fore);
KeyPoint::convert(keypoints,prevKeypoints);
}
imshow("Frame",fore); // frame
// imshow("Background",back);
if(cv::waitKey(30) >= 0) break;
imwrite(file.str(), fore);
file.str("");
}
將vector<uchar> err
更改為Mat err
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.