tag:blogger.com,1999:blog-3790128612215317398.post3258274766265352399..comments2024-03-28T20:14:24.572+09:00Comments on OpenCVで遊ぼう!: OpenCVとOpenGLの組み合わせlhaplus8888http://www.blogger.com/profile/08354867149111645322noreply@blogger.comBlogger3125tag:blogger.com,1999:blog-3790128612215317398.post-18861185454851340812010-09-18T03:29:02.606+09:002010-09-18T03:29:02.606+09:00>lhaplus8888さん
お返事ありがとうございます。OpenGLのオブジェクトを無事表示させる...>lhaplus8888さん<br />お返事ありがとうございます。OpenGLのオブジェクトを無事表示させることができました。コードまで載せていただき、ありがとうございます。<br />これからも記事楽しみにしています!Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-3790128612215317398.post-77520360797107735072010-09-15T21:55:41.194+09:002010-09-15T21:55:41.194+09:00>rhythmistsさん
返答が非常に遅れてしまいました。
cvFindExtrinsic...>rhythmistsさん<br />返答が非常に遅れてしまいました。<br /><br />cvFindExtrinsicCameraParams2で得られるのは<br />rotationベクトルとtranslationベクトルで、<br /><br />rotationが3x1のベクトルになっています。<br />これを3x3の回転行列にするために、<br />cvRodrigues2を使って3x3の行列に変換しました。<br /><br />そのあと、OpenGLの座標系の4x4行列を作って、<br />なんとなく入れてみたら動いた、といった感じです。<br /><br />参考になるかはわかりませんが、<br />そのあたりのコードを記載します。<br /><br /><br />//※rotation、rotationにはcvFindExtrinsicCameraParams2で求めた<br />//ベクトルが入っています。<br /><br />//配列に格納しなおす<br />double _r1[3];<br /> _r1[0]=cvmGet(rotation,0,0);<br /> _r1[1]=cvmGet(rotation,0,1);<br /> _r1[2]=cvmGet(rotation,0,2);<br /><br />double trans[3];<br />trans[0]=cvmGet(translation,0,0);<br />trans[1]=cvmGet(translation,0,1);<br />trans[2]=cvmGet(translation,0,2);<br /><br />//3x3の回転行列を確保<br />double Homograph[9];<br /> <br />CvMat r1 = cvMat(3,1,CV_64F,_r1);<br />CvMat _Homograph = cvMat(3, 3, CV_64F, Homograph );<br /><br />//3x3に変換 <br />cvRodrigues2(&r1, &_H);<br /><br />//ここからはOpenGLのdisplay()関数の中に実装してます<br />//OpenGLの4x4を初期化<br />double glMatrix[16] = <br /> { <br /> 1.0, 0.0, 0.0, 0.0, <br /> 0.0, 1.0, 0.0, 0.0, <br /> 0.0, 0.0, 1.0, 0.0, <br /> 0.0, 0.0, 0.0, 1.0 <br /> }; <br /><br /> //回転行列を入れる <br /> glMatrix[0] = Homograph[0];<br /> glMatrix[1] = Homograph[1];<br /> glMatrix[2] = Homograph[2];<br /> <br /> glMatrix[4] = Homograph[3];<br /> glMatrix[5] = Homograph[4];<br /> glMatrix[6] = Homograph[5];<br /> <br /> glMatrix[8] = Homograph[6];<br /> glMatrix[9] = Homograph[7];<br /> glMatrix[10]= Homographh[8];<br /><br /> //移動ベクトルを入れる<br /> glMatrix[12]= trans[0];<br /> glMatrix[13] =trans[1];<br /> glMatrix[14] =trans[2]; <br /><br /> glMultMatrixd(glMatrix);<br />//ここまで。。<br /><br /><br />また、下記ページを参考させて作ってみました。<br /><br />マーカー検出と3次元座標推定<br />http://kato.keiske.info/blog/2009/05/3.html<br />被写体を回そうとするとなぜかカメラが回ってしまう の続き<br />http://kato.keiske.info/blog/2009/05/post-101.html<br /><br />モデルビュー変換<br />http://wisdom.sakura.ne.jp/system/opengl/gl11.htmllhaplus8888https://www.blogger.com/profile/08354867149111645322noreply@blogger.comtag:blogger.com,1999:blog-3790128612215317398.post-13151061132963746542010-08-27T04:44:59.307+09:002010-08-27T04:44:59.307+09:00はじめまして。いつも楽しみに拝見しています。
私もOpenCVとOpenGLを組み合わせてARのよう...はじめまして。いつも楽しみに拝見しています。<br />私もOpenCVとOpenGLを組み合わせてARのようなものを作っているのですが、OpenGLの座標系の設定がうまくできません。<br />cvFindExtrinsicCameraParams2()から得たrotationとtranslationからglLoadMatrixd()で設定していると思うのですが、glLoadMatrixd()にはどのような行列を設定しているのでしょうか?<br />教えていただければ幸いです。Anonymousnoreply@blogger.com