こんにちは私は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にかなり慣れていないので、助けていただければ幸いです。前もって感謝します!
コメントでの会話から質問まで、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();
...