2021年01月12日
Qt5 モノクロームをR,G,Bでそれぞれ表示する 高速^^;QTだからこそ?の裏技
前提 条件 RGBの cv:: Mat 形式が入力されたとする。
これはうまくいった 話だ 読み進めるとあ〜だめだった みたいなことは ない 多分^^;
Matを 3チャネルでコピーして RGB をそれぞれ 表示すると時間がかかる
色別に 0をR 1をG 2をB 3をカラーとして
こんなことをすると 時間がかかるので
cv::Mat matAlpha;
cv::Mat matRGB=matRGBinput.clone();
std::vector planes;
planes.clear();
cv::split(matRGB, planes);
switch(this->m_alpha)
{
case 0: matAlpha=planes[0];break;
case 1: matAlpha=planes[1];break;
case 2: matAlpha=planes[2];break;
}cv::bitwise_not(matAlpha, matAlpha);
で済ませる
早い話がモノクロームで RGBそれぞれとる。
そもそもがMatは BGRの並びだが ここではRGBで入ってくるようにした。
ちなみにBGR とRGBの入れ替えは
cv::split(matRGB, planes);
して 別のstd::vector planes2nd;
planes2nd.pushback(planes[2]);
planes2nd.pushback(planes[1]);
planes2nd.pushback(planes[0]);
merge(planes2nd,matRGB);
だったかな 確認オネ 順番が違う。入れ替えればいい
if(this->m_alpha!=3){
QImage _Alpha = QImage(matAlpha.data, matAlpha.cols, matAlpha.rows, static_cast(matAlpha.step), QImage::Format_Alpha8);
QAlpha =_Alpha.copy();
}else
{
QImage tmpimg = QImage(matRGB.data, matRGB.cols, matRGB.rows, static_cast(matRGB.step), QImage::Format_RGB888);
tmpimg1 =tmpimg.copy();
}
な感じで QTのアルファ にコピーする。
そして 背景色を 次のような感じで変更しておく
すると 背景色が 見えるので RGB の表示で 青はよくみえないので シアンで代替して表示させた。
これをQt5で 表示する。 表示用のウィジェット は こんなやつだとする。
こいつは setImg( QImage &img ) されるとすぐに 表示をアップデートする。 やつだ
まぁいいだろう。
これはうまくいった 話だ 読み進めるとあ〜だめだった みたいなことは ない 多分^^;
Matを 3チャネルでコピーして RGB をそれぞれ 表示すると時間がかかる
色別に 0をR 1をG 2をB 3をカラーとして
case 0:
planes[1]=Mat::zeros(matRGB.rows, matRGB.cols, CV_8UC1);//G
planes[2]=Mat::zeros(matRGB.rows, matRGB.cols, CV_8UC1);//B
merge(planes,matRGB);
break;
こんなことをすると 時間がかかるので
cv::Mat matAlpha;
cv::Mat matRGB=matRGBinput.clone();
std::vector
planes.clear();
cv::split(matRGB, planes);
switch(this->m_alpha)
{
case 0: matAlpha=planes[0];break;
case 1: matAlpha=planes[1];break;
case 2: matAlpha=planes[2];break;
}cv::bitwise_not(matAlpha, matAlpha);
で済ませる
早い話がモノクロームで RGBそれぞれとる。
そもそもがMatは BGRの並びだが ここではRGBで入ってくるようにした。
ちなみにBGR とRGBの入れ替えは
cv::split(matRGB, planes);
して 別のstd::vector
planes2nd.pushback(planes[2]);
planes2nd.pushback(planes[1]);
planes2nd.pushback(planes[0]);
merge(planes2nd,matRGB);
だったかな 確認オネ 順番が違う。入れ替えればいい
if(this->m_alpha!=3){
QImage _Alpha = QImage(matAlpha.data, matAlpha.cols, matAlpha.rows, static_cast
QAlpha =_Alpha.copy();
}else
{
QImage tmpimg = QImage(matRGB.data, matRGB.cols, matRGB.rows, static_cast
tmpimg1 =tmpimg.copy();
}
な感じで QTのアルファ にコピーする。
そして 背景色を 次のような感じで変更しておく
すると 背景色が 見えるので RGB の表示で 青はよくみえないので シアンで代替して表示させた。
switch (alpha) {
case 0:
m_QAlphaimageWidget->setStyleSheet("background-color:red");break;
case 1:
m_QAlphaimageWidget->setStyleSheet("background-color:green");break;
case 2:
m_QAlphaimageWidget->setStyleSheet("background-color:cyan");break;
break;
}
これをQt5で 表示する。 表示用のウィジェット は こんなやつだとする。
こいつは setImg( QImage &img ) されるとすぐに 表示をアップデートする。 やつだ
ImageWidget::ImageWidget(QWidget *parent ):QGraphicsView(parent)
{
}
ImageWidget::~ImageWidget()
{
}
void ImageWidget::paintEvent( QPaintEvent *event )
{ Q_UNUSED(event);
QPainter widgetpainter( viewport() );
// widgetpainter.setWorldTransform( m_matrix );
QImage qimg = m_img.scaled(
viewport()->width(),
viewport()->height(),
Qt::KeepAspectRatio,Qt::FastTransformation);
widgetpainter.drawImage( 0, 0, qimg );
}
void ImageWidget::setImg( QImage &img )
{
m_img = QImage( img );
viewport()->update();
}
まぁいいだろう。
【このカテゴリーの最新記事】
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/10465300
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック