QImage 與 cv Mat 之間的相互轉換

2021-09-08 22:27:01 字數 1082 閱讀 2293

近期做影象處理方面的專案比較多,非常多演算法自己從頭寫的話太浪費時間,並且自己寫的也不一定完好,早就聽說opencv

在影象處理演算法方面功能非常強大,一直沒時間學習,這次正好專案用到了。暫時抱佛腳學習些

opencv

入門知識。由於我的程式介面都是用

qt寫的,因此也花了點時間研究了怎樣將

opencv 

和qt 

融合在一起,協同工作。

qt 中處理影象主要用的是

qimage

類。opencv

中主要用的是

cv::mat

類。以下的兩個函式能夠用來實現這兩個類相互轉換。

qimage cvmat2qimage(const cv::mat& mat)

// copy input mat

uchar *psrc = mat.data;

for(int row = 0; row < mat.rows; row ++)

return image;

}// 8-bits unsigned, no. of channels = 3

else if(mat.type() == cv_8uc3)

else if(mat.type() == cv_8uc4)

else

}cv::mat qimage2cvmat(qimage image)

return mat;

}

程式比較簡單,就不多說明了。唯一須要注意的是cvmat 和qimage 對於rgba 這四個分量的排列順序是不同樣的。轉換的時候須要調換一下。可是qt 的文件中說的非常明白,qimage內部資料儲存的方式不能保證以後永遠不變。

所以這個**也不能保證一直是可用的。

以下是五個測試用例。基本上把各種常見情況都覆蓋了。

void test1()

void test2()

void test3()

void test4()

void test5()

int main(int argc, char *ar**)

QImage 與 cv Mat 之間的相互轉換

最近做影象處理方面的專案比較多,很多演算法自己從頭寫的話太浪費時間,而且自己寫的也不一定完善,早就聽說opencv 在影象處理演算法方面功能很強大,一直沒時間學習,這次正好專案用到了,臨時抱佛腳學習些 opencv 入門知識。因為我的程式介面都是用 qt寫的,因此也花了點時間研究了如何將 openc...

QImage和cv Mat的相互轉換

一 實現思路 qimage和cv mat的畫素資料都是儲存在堆上的uchar陣列中,詳情見 cv mat的記憶體結構與訪問 因此實現qimage和cv mat的相互轉換,只需要拷貝堆上的uchar陣列即可。二 c 實現淺拷貝 todo 淺拷貝注意事項與c 三 c 實現深拷貝 1 ly opencv ...

CvMat 和cv Mat之間的區別

cv mat是乙個類 class 而cvmat是乙個struct,從型別上就可以知道二者存在很大區別。前者除了幾個成員變數之外還有很多的成員函式和過載函式,可以實現很多的影象資料處理功能,而後者只有幾個成員變數,要對其成員進行一些處理,需要借用別的函式。typedef struct cvmat da...