簡體   English   中英

將Qimage轉換為cvMat 64FC3格式

[英]convert Qimage to cvMat 64FC3 format

我在互聯網上進行了大量搜索,但是我只找到了如何將Qimage轉換為RGB格式,我想將Qimage轉換為簡歷格式CV_64FC3。 當我使用CV_8UC3時,我的結果非常糟糕

這是我的代碼:

QImage myImage;
myImage.load("C://images//PolarImage300915163358.bmp");

QLabel myLabel;
myLabel.setPixmap(QPixmap::fromImage(myImage));

//myLabel.show();

cv::Mat image1 = QImage2Mat(myImage);



Mat img;

image1.convertTo(img, CV_64FC3, 1.0 / 255.0);

這是我使用的功能:

cv::Mat QImage2Mat(QImage const& src)
{
     cv::Mat tmp(src.height(),src.width(),CV_8UC3,(uchar*)src.bits(),src.bytesPerLine());
     cv::Mat result; // deep copy just in case (my lack of knowledge with open cv)
     cvtColor(tmp, result,CV_BGR2RGB);
     return result;
}

請幫助我即時了解opencv和Qt

不知道結果不好意味着什么,但是您假設QImage還將圖像加載為OpenCV( BGR )。 在文檔中,它告訴您它們使用ARGB

因此,知道這一點,您有2個選擇:

  1. 使用convertToFormat函數將Qimage轉換為QImage::Format_RGB888 ,然后將此行cvtColor(tmp, result,CV_BGR2RGB); 不需要,因為它將已經是RGB。
  2. 創建cv::Mat時使用CV_8UC4 ,然后使用split和join或mixchannels刪除第一個通道(通道alpha)。

我發現了問題所在,實際上,Qimage有一個用於Alpha的第四通道,因此當您讀取Qimage數據時,需要將其放入CV_8UC4

這是代碼:

Mat QImage2Mat(const QImage& src) { 
    cv::Mat mat = cv::Mat(src.height(), src.width(), CV_8UC4, (uchar*)src.bits(), src.bytesPerLine()); 
    cv::Mat result = cv::Mat(mat.rows, mat.cols, CV_8UC3 ); 
    int from_to[] = { 0,0,  1,1,  2,2 }; 
    cv::mixChannels( &mat, 1, &result, 1, from_to, 3 ); 
    return result; 
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM