web-dev-qa-db-ja.com

OpenCVエラー:cv :: cvtColor、ファイル.. \ .. \ .. \ .. \ opencv \ modules \ imgproc \ src \ color.cpp、行3737でアサーションが失敗しました(scn == 3 || scn == 4)

こんにちは私はOpenCVからこのサンプルコードを実行しようとしています:

#include "opencv2\opencv.hpp"

using namespace cv;

int main(int, char**)
{
    VideoCapture cap(0); // open the default camera
    if (!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    namedWindow("edges", 1);
    for (;;)
    {
        Mat frame;
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, CV_BGR2GRAY);
        GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
        Canny(edges, edges, 0, 30, 3);
        imshow("edges", edges);
        if (waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
    return 0;
}

私は現在、MacbookProでWindows7 x64BootCampを使用しています。このコードは、Visual Studios2013とOpenCV2.4.9で実行しています。

これは、構成プロパティを設定する方法です。

VC++ Directories: Include Directories: H:\opencv\build\include;$(IncludePath)

Linker:General:Additional Library Directories: H:\opencv\build\x64\vc12\lib;%(AdditionalLibraryDirectories)
Linker:Input:Additional Dependencies: opencv_calib3d249.lib;opencv_contrib249.lib;opencv_core249.lib;opencv_features2d249.lib;opencv_flann249.lib;opencv_gpu249.lib;opencv_highgui249.lib;opencv_imgproc249.lib;opencv_legacy249.lib;opencv_ml249.lib;opencv_nonfree249.lib;opencv_objdetect249.lib;opencv_ocl249.lib;opencv_photo249.lib;opencv_stitching249.lib;opencv_superres249.lib;opencv_ts249.lib;opencv_video249.lib;opencv_videostab249.lib;%(AdditionalDependencies)

リリースx64モードでローカルWindowsデバッガーをクリックすると、VisualStudioから次のエラーが発生します。

Project3.exeの0x000007FEFD21B3DDでの初回例外:Microsoft C++例外:メモリ位置0x000000000019A8A0でのcv :: Exception。

この例外のハンドラーがある場合、プログラムは安全に続行できます。

代わりに[中断]をクリックすると(続行を押すのが怖い)、Edgesという名前のウィンドウがポップアップし、緑色のライトがオンになるため、カメラがオンになります。しかし、コマンドウィンドウで次のエラーも発生します。

OpenCVエラー:cv :: cvtColor、ファイル........\opencv\modules\imgproc\src\color.cpp、行3737でアサーションが失敗しました(scn == 3 || scn == 4)

私はC++とVisualStudioにかなり慣れていないので、助けていただければ幸いです。前もって感謝します!

7
Joissa.R

コメントでの会話から質問まで、VideoCaptureがグレースケールでフレームを提供することがわかりました。そのため、cvtColorを呼び出すとクラッシュしました。

...
Mat frame;
cap >> frame; // frame is already CV_8UC1
//cvtColor(frame, edges, CV_BGR2GRAY); // so don't to convert here, or crash!
edges = frame.clone(); 
...
3
Miki