我使用的OpenCV通過C++接口。我有一個cv::Mat m1
表示的多通道的圖像,從中我需要獲得一個單一的通道圖像m2
其中像素具有如圖值在m1
對應的像素的所有值中的最大值(在m1
的像素具有多個值,一個用於每個頻道)。有沒有人知道從m1
獲得m2
的最有效方法?最大單通道CV ::墊從多通道CV ::墊
2
A
回答
2
可以使用cv::reduce()
和Mat::reshape()
做到這一點。關鍵是將m1
重塑爲單通道圖像,其中行的每個元素表示一個顏色分量。你可以通過m1.reshape(1, m1.total())
來做到這一點。然後施加reduce()
將得到含有最大分量值的Mat
,然後它是一個簡單的事情來重塑結果,得到的m1
形狀。一個簡單的例子如下:
uchar data[] = {1,2,3, 3,1,2, 2,1,3, 3,2,1};
cv::Mat m1(2,2, CV_8UC3, data); // Maximum component value is 3 for all pixels
cv::Mat m2;
cv::reduce(m1.reshape(1, m1.total()), m2, 1, CV_REDUCE_MAX);
m2 = m2.reshape(0, m1.cols); // 2x2 Mat, all elements are 3
+0
我同意你的答案,我可以把它應用到我的問題,但正如我之前所說,並根據OpenCV的文檔m.reshape(X,Y)只能應用在m.IsContinuous()返回true。在這種情況下的任何答案? –
+0
寫你自己的解決方案?這不是一個難以解決的問題。 – Aurelius
相關問題
- 1. cv ::大整數的墊子
- 2. 構造從兩個cv ::墊和一個面具cv ::墊
- 3. 打開CV通用墊功能頭
- 4. 如何CV ::墊轉換爲CV :: Matx33f
- 5. 轉換1通道墊至3通道墊
- 6. OpenCV cv深層副本::墊
- 7. openCV與cv混合IplImage ::墊
- 8. 轉換字節CV ::墊
- 9. Opencv cv ::墊公差間隔
- 10. 轉換CV ::墊Magick ::圖片
- 11. std :: cv的向量::墊
- 12. 墊單通道元素訪問
- 13. 轉換矢量<cv::Point3f>到CV ::類型CV_32FC3的墊
- 14. 的OpenCV的std ::矢量<CV :: Point2f>到CV ::墊
- 15. cv ::腐蝕錯誤與二進制cv ::墊
- 16. cv :: cuda :: pow中浮動墊的輸出?
- 17. 免費cv ::墊沒有釋放內存
- 18. 矩陣乘法使用cv ::墊
- 19. C++/CV ::墊等效使用的memcpy
- 20. OpenCV 2.3.1。 CV ::墊到std :: vector的投
- 21. 偷CV ::墊的資源的IplImage
- 22. 訪問所有像素CV ::墊
- 23. OpenCV的:計算一組CV ::墊
- 24. 我應該初始化CV ::墊
- 25. 如何使用CV ::墊類型
- 26. OpenCV的錯誤訪問CV ::墊數據
- 27. pcl ::點雲到cv ::墊深度圖像
- 28. cv:墊,每隔一個像素設置
- 29. 轉換一個UIImage成CV ::墊,並從文件中讀取CV ::墊給出不同的結果
- 30. 添加alpha通道的OpenCV墊
看看http://docs.opencv.org/modules/core/doc/operations_on_arrays.html#void%20reduce%28InputArray%20src,%20OutputArray%20dst,%20int %20dim,%20int%20rtype,%20int%20dtype%29,但你必須寬*高3通道元素轉換成寬*高*信道矩陣第一 – Micka
怎樣才能做轉換,你能更明確?我可以使用Mat :: reshape(),但是在這種情況下矩陣必須滿足Mat :: IsCountinuous()。 –