8

QImageインターネットで検索しましたが、 (またはQPixmap)をOpenCVに変換する方法が見つかりませんMat。どうすればいいですか?

どんな助けでも大歓迎です。

4

5 に答える 5

11

この質問を発行してから 1 年後、インターネット上で素晴らしい回答が得られました。

しかし、私が見ているように、Qt と OpenCV を同時に使用している場合、 typeQImageはおそらく表示用であり、その場合は表示QPixmap用に最適化されているため、使用することをお勧めします。だからこれは私がすることです:

  1. 画像を読み込んcv::Matで、画像を表示したい場合QPixmapは2回目の記事で紹介した非コピー方法で変換してください。
  2. で画像処理を行いcv::Matます。
  3. Mat2QPixmap()ワークフロー中はいつでも、リアルタイムの結果を得るために何かを呼び出すことができます。
  4. に変換QPixmapしないでくださいcv::Mat。各タイプの目的を考慮すると意味がありません。
于 2014-04-24T07:03:04.737 に答える
9

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 に変換できます。

于 2012-08-09T15:37:50.157 に答える
-3

イメージをディスクに保存し、cvから再度開きます;)

@^私は前の解決策を試しました。それは私と一緒に働いていないようです。画像を取得していますが、バーコード情報のような画像のようです。パラメータの不一致があると思います。

于 2012-08-10T05:55:38.787 に答える