QImage
インターネットで検索しましたが、 (またはQPixmap
)をOpenCVに変換する方法が見つかりませんMat
。どうすればいいですか?
どんな助けでも大歓迎です。
この質問を発行してから 1 年後、インターネット上で素晴らしい回答が得られました。
しかし、私が見ているように、Qt と OpenCV を同時に使用している場合、 typeQImage
はおそらく表示用であり、その場合は表示QPixmap
用に最適化されているため、使用することをお勧めします。だからこれは私がすることです:
cv::Mat
で、画像を表示したい場合QPixmap
は2回目の記事で紹介した非コピー方法で変換してください。cv::Mat
ます。Mat2QPixmap()
ワークフロー中はいつでも、リアルタイムの結果を得るために何かを呼び出すことができます。QPixmap
しないでくださいcv::Mat
。各タイプの目的を考慮すると意味がありません。QImage がまだ存在し、それに対して簡単な操作を実行する必要がある場合は、QImage メモリを使用して cv::Mat を構築できます。
cv::Mat mat(image.height(), image.width(), CV_8UC3, (cv::Scalar*)image.scanLine(0));
これは、QImage が 3 チャンネル、つまり RGB888 であることを前提としています。
QImage がなくなる場合は、データをコピーする必要があります。 Qimage から cv::Mat への変換の奇妙な動作 を参照してください。
QImage が Format_ARGB32_Premultiplied (優先フォーマット) の場合、各ピクセルを OpenCV の BGR レイアウトに変換する必要があります。cv::cvtcolor() 関数は、最新バージョンで ARGB を RGB に変換できます。
または、QImage::convertToFormat()を使用して、データをコピーする前に RGB に変換できます。
イメージをディスクに保存し、cvから再度開きます;)
@^私は前の解決策を試しました。それは私と一緒に働いていないようです。画像を取得していますが、バーコード情報のような画像のようです。パラメータの不一致があると思います。