次のタイプの画像を返す PointGrey カメラを使用しています。
typedef struct FlyCaptureImage
{
// Rows, in pixels, of the image.
int iRows;
// Columns, in pixels, of the image.
int iCols;
// Row increment. The number of bytes per row.
int iRowInc;
// Video mode that this image was captured with. This member is only
// populated when the image is returned from a grab call.
FlyCaptureVideoMode videoMode;
// Timestamp of this image.
FlyCaptureTimestamp timeStamp;
// Pointer to the actual image data.
unsigned char* pData;
//
// If the returned image is Y8, Y16, RAW8 or RAW16, this flag indicates
// whether it is a greyscale or stippled (bayer tiled) image. In all
// other modes, this flag has no meaning.
//
bool bStippled;
// The pixel format of this image.
FlyCapturePixelFormat pixelFormat;
// This field is always 1 for single lens cameras. This field is
// used to indicate the number of images contained in the structure
// when dealing with multi-imager systems such as the Bumblebee2
// or XB3? int iNumImages;
int iNumImages;
// Reserved for future use.
unsigned long ulReserved[ 5 ];
} FlyCaptureImage;
私はOpenCV Matで画像を処理したいのですが、変換が必要です。画像内のすべての要素を反復してコピーすることに成功しました。しかし、それは遅いです。そのため、ポインターだけをコピーすることをお勧めします。これは、マットの初期化を使用した私のコードです。
MatImg = Mat::Mat(FCImg.iRows, FCImg.iCols, CV_8UC3, FCImg.pData);
これについてアドバイスをお願いします。正しいやり方ですか??この変換を、返された Mat 画像を受け取ったメイン プログラムとは別のクラスに入れました (例: mycam.getframe(image))。
ありがとう!