OpenCVの2.4.4バージョンを使用しています。-ベータ版は知っていcv::calcOpticalFlowSF
ますが、サンプルフォルダにメソッドに関する例があります:simpleflow_demo.cpp
。しかし、このデモをコピーして入力画像で使用すると、処理が開始され、数秒後にクラッシュレポートが返されます。メソッドに関するドキュメントは少し奇妙で、出力ファイルはcv::Mat& flow
メソッドが実際に必要とするものではなく、x-およびyflowであると言っています。関数を機能させるために問題を修正する方法はありますか?
質問する
5990 次
2 に答える
4
私のために働いたこの簡単なデモを試してから、必要に応じて変更してください(ここからヘルプを表示してください):
Mat frame1 = imread("/home/radford/Desktop/1.png");
Mat frame2 = imread("/home/radford/Desktop/2.png");
namedWindow("flow");
Mat flow;
calcOpticalFlowSF(frame1, frame2, flow, 3, 2, 4);
Mat xy[2];
split(flow, xy);
//calculate angle and magnitude
Mat magnitude, angle;
cartToPolar(xy[0], xy[1], magnitude, angle, true);
//translate magnitude to range [0;1]
double mag_max;
minMaxLoc(magnitude, 0, &mag_max);
magnitude.convertTo(magnitude, -1, 1.0/mag_max);
//build hsv image
Mat _hsv[3], hsv;
_hsv[0] = angle;
_hsv[1] = Mat::ones(angle.size(), CV_32F);
_hsv[2] = magnitude;
merge(_hsv, 3, hsv);
//convert to BGR and show
Mat bgr;//CV_32FC3 matrix
cvtColor(hsv, bgr, COLOR_HSV2BGR);
imshow("flow", bgr);
waitKey(0);
于 2013-02-20T17:36:59.150 に答える
0
例opencv/samples / cpp / simpleflow_demo.cppには、コードブロックがあります
if (frame1.type() != 16 || frame2.type() != 16) {
printf(APP_NAME "Images should be of equal type CV_8UC3\n");
exit(1);
}
したがって、灰色の画像はCV_8UC3に変換する必要があります。たとえば、cvtColor(grey、grey3、CV_GRAY2RGB);を使用します。
于 2016-09-24T14:29:48.397 に答える