イメージをcvMatタイプからQimageに変換したいのですが、実際のコードではアプリケーションは動作しません。私は他の方法(QImageのが正常に動作し、それをマットに) は何がここからcvMatをQImageに
私のコードで間違った上で起こっている教えてくださいそれをやってきたマットにQImageのための私のコードです:
Mat qimage2mat(const QImage& qimage) {
cv::Mat mat = cv::Mat(qimage.height(), qimage.width(), CV_8UC4, (uchar*)qimage.bits(), qimage.bytesPerLine());
cv::Mat mat2 = cv::Mat(mat.rows, mat.cols, CV_8UC3);
int from_to[] = { 0,0, 1,1, 2,2 };
cv::mixChannels(&mat, 1, &mat2, 1, from_to, 3);
return mat2;
}
、ここでは、マットがスコープの外に出たとき@SpamBot言及したが、データが解放されるようQImageの
QImage mat2qimage(const Mat& mat) {
Mat rgb;
cvtColor(mat, rgb, CV_BGR2RGB);
return QImage((const unsigned char*)(rgb.data), rgb.cols, rgb.rows, QImage::Format_RGB888);
}
にマットのための私のコードは、事前
'Mat rgb'が範囲外になり、関数の最後に*削除*されます。画像データをコピーするか、より長く続く 'mat'から変換してください。 – SpamBot
あなたはデータをコピーする方法を教えてください – ner
または、安価な解決策は、 '新しい'で 'Mat * rgb'を作成します。 – SpamBot