13

OpenCVで画像を回転させようとしています。

StackOverflowで見つけた次のコードを使用しました。

Mat source(img);
Point2f src_center(source.cols/2.0, source.rows/2.0);
Mat rot_mat = getRotationMatrix2D(src_center, 40.0, 1.0);
Mat dst;
warpAffine(source, dst, rot_mat, source.size());

変数の型がいっぱいになったら、それを変数の型dst Matに戻したいのIplImageですが、これを行う方法について何かアイデアはありますか?

4

4 に答える 4

17

新しいOpenCV2.0C ++インターフェースでは、との間を行ったり来たりする必要はありませんが、必要に応じてMat演算子IplImageを使用できます。IplImage

IplImage dst_img = dst;

IplImageヘッダーのみが作成され、データ(ピクセル)が共有されることに注意してください。詳細については、 OpenCVC++インターフェイスまたはディレクトリimage.cpp内の例を参照してください。OpenCV-2.0/samples/c

于 2010-03-22T14:18:40.927 に答える
15

オブジェクト全体を取得するために、次のIplImageコードを使用しました。

Mat matImage;
IplImage* iplImage;

iplImage = cvCreateImage(cvSize(640,480), IPL_DEPTH_8U, 1);
iplImage->imageData = (char *) matImage.data;

ポインタの代わりにデータをコピーすることもできます。

memcpy(iplImage->imageData, matimage.data, 640*480);
于 2012-04-26T00:04:01.797 に答える
1

Normanはブログで次のように説明しています(2.0ではありませんが、問題に当てはまるはずです)。

CvMatからIplImageに変換するには、次の関数を使用します。

IplImage* cvGetImage( const CvArr* arr, IplImage* image_header );  

関数cvGetImageは、入力配列の画像ヘッダーを返します。これは、matrix(CvMat *)またはimage(IplImage *)にすることができます。画像の場合、関数は単に入力ポインタを返します。CvMat *の場合、入力行列のパラメーターを使用してimage_header構造を初期化します。使用法:

IplImage stub, *dst_img;
dst_img = cvGetImage(src_mat, &stub);
于 2010-03-19T07:58:17.993 に答える
0

OpenCV 2.4以降のバージョンでは、次の方法で簡単に変換できます。

cv::Mat inMat;
//do the stuffs
IplImage* outIPL = (IplImage*)(&IplImage(inMat));
于 2016-12-09T06:14:57.880 に答える