2012-02-09 8 views
7

に(dst.data == dst0.data)に失敗しました:修正後のコードを更新しましたOpenCVの - アサーションは、次のコードは、エラーメッセージ掲載する予定cvCvtColor

// object is a color image with type cv::Mat 

IplImage* temp_object = &(IplImage)object; 
IplImage* ipl_object = cvCreateImage(cvGetSize(temp_object), 8, 3); 
assert(temp_object->nChannels == 3 && temp_object->depth == IPL_DEPTH_8U); 
assert(ipl_object->nChannels == 3 && ipl_object->depth == IPL_DEPTH_8U); 
cvCvtColor(ipl_object, temp_object, CV_BGR2GRAY); 

エラー

OpenCV Error: Assertion failed (dst.data == dst0.data) in cvCvtColor, file /opt/local /var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.3.1/modules/imgproc/src/color.cpp, line 3175 terminate called throwing an exception`

を(今はうまくいくはずです)。助けてくれてありがとう! IplImageとして再解釈objectにあなたにポインタを与えるものではありません

IplImage temp_object (object); 
IplImage* ipl_object = cvCreateImage(cvGetSize(&temp_object), 8, 1); 
cvCvtColor(&temp_object, ipl_object, CV_BGR2GRAY); 

答えて

7
IplImage* temp_object = &(IplImage)object; 

、。代わりに、objectからIplImageの一時的なものを作成し、それへのポインタを与えて、一時的なものを破棄します。temp_objectは何も有効ではありません。その後temp_objectを使用すると、未定義の動作が発生します。

私は図書館に慣れていないんだけど、おそらくあなたは(IplImageはどんなタイプobjectのサブタイプである場合である)objectへのポインタをしたい:

IplImage* temp_object = static_cast<IplImage *>(&object); 

ポインタを変換するために、キャストを使用して(またはあなたが好きな場合は参照)、オブジェクトそのものではありません。

それとも新しい(非一時的)オブジェクトをしたい:

IplImage temp_object(object); 
+0

ありがとうございます。 'IplImage * temp_object = static_cast (&オブジェクト);'エラーを出します: 'cv :: Mat * 'タイプの無効なstatic_castをタイプ' IplImage * '' – LKS

+0

@ user1020390:その場合は、新しいオブジェクト。一時的なものではないように名前を付ける必要があります。私の編集を参照してください。 –

+0

ありがとうございます。私はそれが今働くべきだと思う。 – LKS

4

もう一つの問題は、CV_BGR2GRAYは、宛先がシングルチャネル、およびないトリプルことを期待していることです。また、cvCvtColor()の署名はSRCで始まり、次にDSTで始まります。おそらくコードを次のように調整したいと考えています:

IplImage* ipl_object = cvCreateImage(cvGetSize(temp_object), 8, 1); 
cvCvtColor(&object, ipl_object, CV_BGR2GRAY); 
+0

ありがとう!私はcvCvtColorで間違いを犯しました。あなたのアドバイスは正しいです。それが私のやりたいことです。私も上記のように、 'IplImage * temp_object = static_cast (&object);という行で適切な型のtemp_objectを作成することはできません。 エラーは、それが無効なstatic_castだと言いました。私はどこかで間違った? – LKS

+1

ありがとうございます。私はそれが今働くべきだと思う。 – LKS