Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用添加的透视功能显示OpenCV/sample/cpp/lkdemo.cpp的图像_C++_Opencv - Fatal编程技术网

C++ 无法使用添加的透视功能显示OpenCV/sample/cpp/lkdemo.cpp的图像

C++ 无法使用添加的透视功能显示OpenCV/sample/cpp/lkdemo.cpp的图像,c++,opencv,C++,Opencv,您好,我已尝试在OpenCV/sample/cpp中修改lkdemo.cpp。 我想得到透视变换,然后透视。 所以我添加了第(1)行和第(2)行来实现这一点。 其中,图像和输出的声明如下: Mat gray, prevGray, image, output; .... calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,

您好,我已尝试在
OpenCV/sample/cpp
中修改
lkdemo.cpp
。 我想得到透视变换,然后
透视
。 所以我添加了第(1)行和第(2)行来实现这一点。 其中,图像和输出的声明如下:

Mat gray, prevGray, image, output;

....

calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,
                                 3, termcrit, 0, 0.001);

 (1)   CvMat H = getPerspectiveTransform(points[0], points[1]); 
 (2)   cvWarpPerspective(&image, &output, &H,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

...
(gdb) bt
#0  0xb7fdd424 in __kernel_vsyscall ()
#1  0xb77741ef in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0xb7777835 in __GI_abort () at abort.c:91
#3  0xb79e313d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#4  0xb79e0ed3 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#5  0xb79e0f0f in std::terminate() () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#6  0xb79e105e in __cxa_throw () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#7  0xb7eb9363 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.4
#8  0xb7e40496 in cvGetMat () from /usr/local/lib/libopencv_core.so.2.4
#9  0xb7ceb915 in cvImageWidgetSetImage(_CvImageWidget*, void const*) () from /usr/local/lib/libopencv_highgui.so.2.4
#10 0xb7ced4e0 in cvShowImage () from /usr/local/lib/libopencv_highgui.so.2.4
#11 0xb7cea378 in cv::imshow(std::string const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_highgui.so.2.4
#12 0x0804a1ca in main (argc=2, argv=0xbffff724) at lkdemo-1.cpp:141
(gdb) 
现在,当我尝试使用
imshow()
查看扭曲图像的输出时,我得到了以下错误:

error: (-206) Unrecognized or unsupported array type in function cvGetMat
调试后的回溯如下:

Mat gray, prevGray, image, output;

....

calcOpticalFlowPyrLK(prevGray, gray, points[0], points[1], status, err, winSize,
                                 3, termcrit, 0, 0.001);

 (1)   CvMat H = getPerspectiveTransform(points[0], points[1]); 
 (2)   cvWarpPerspective(&image, &output, &H,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, cvScalarAll(0));

...
(gdb) bt
#0  0xb7fdd424 in __kernel_vsyscall ()
#1  0xb77741ef in __GI_raise (sig=6) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#2  0xb7777835 in __GI_abort () at abort.c:91
#3  0xb79e313d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#4  0xb79e0ed3 in ?? () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#5  0xb79e0f0f in std::terminate() () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#6  0xb79e105e in __cxa_throw () from /usr/lib/i386-linux-gnu/libstdc++.so.6
#7  0xb7eb9363 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.4
#8  0xb7e40496 in cvGetMat () from /usr/local/lib/libopencv_core.so.2.4
#9  0xb7ceb915 in cvImageWidgetSetImage(_CvImageWidget*, void const*) () from /usr/local/lib/libopencv_highgui.so.2.4
#10 0xb7ced4e0 in cvShowImage () from /usr/local/lib/libopencv_highgui.so.2.4
#11 0xb7cea378 in cv::imshow(std::string const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_highgui.so.2.4
#12 0x0804a1ca in main (argc=2, argv=0xbffff724) at lkdemo-1.cpp:141
(gdb) 

请任何人帮助我解决这个问题。

实际上,由于getPerspectiveTransform方法所需的点数不匹配,我遇到了上述错误。 错误是:错误:OpenCV错误:在getPerspectiveTransform中断言失败(src.checkVector(2,CV_32F)==4和&dst.checkVector(2,CV_32F)==4)

实际上,转换需要四个点,我使用所有点。 以下是使用lk光流调用getPerspectiveTransform的正确方法,以备需要

    std::vector<Point2f> img1_corners(4);

    img1_corners[0] = cvPoint(0,0); 
    img1_corners[1] = cvPoint( gray.cols, 0 );
    img1_corners[2] = cvPoint( gray.cols, gray.rows ); 
    img1_corners[3] = cvPoint( 0, gray.rows );

    std::vector<Point2f> img2_corners(4);

    vector<uchar> status;
    vector<float> err;
    calcOpticalFlowPyrLK(gray, gray1, img1_corners, img2_corners, status, err, winSize,
            3, termcrit, 0, 0.001);
    //calcOpticalFlowPyrLK(gray, gray1, corner1, corner2, status, err, winSize,
    //      3, termcrit, 0, 0.001);


    Mat H = getPerspectiveTransform(img1_corners, img2_corners);
    //Mat H = getPerspectiveTransform(corner1, corner2);
std::向量img1_角(4);
img1_角[0]=cvPoint(0,0);
img1_角[1]=cvPoint(gray.cols,0);
img1_角点[2]=cvPoint(gray.cols,gray.rows);
img1_角点[3]=cvPoint(0,灰色.行);
std::向量img2_角(4);
病媒状态;
矢量误差;
calcOpticalFlowPyrLK(灰色、灰色1、img1_角点、img2_角点、状态、错误、winSize、,
3,termcrit,0,0.001);
//calcOpticalFlowPyrLK(灰色、灰色1、角落1、角落2、状态、错误、winSize、,
//3,termcrit,0,0.001);
Mat H=getPerspectiveTransform(img1_角点、img2_角点);
//Mat H=getPerspectiveTransform(拐角1、拐角2);

您可能有兴趣看看.Hi@karlphillip。通过gdb,我想我找到了问题所在。实际上,问题在于H=getPerspectiveTransform(点[0],点[1]);实际上getPerspectiveTransform期望的是“Point2f”(双精度),我将点作为向量点[2];(可以是int)calcOpticalFlowPyrLK要求的。因此,当点击getPerspectiveTransform时,在中获取以下错误:OpenCV错误:断言失败(src.checkVector(2,CV_32F)==4&&dst.checkVector(2,CV_32F)==4)getPerspectiveTransform@Astor-你能告诉我如何从向量点[2]得到浮点数组吗。我相信getPerspectiveTransform之所以出错,仅仅是因为这个问题。谢谢