我一直在嘗試使用透明通道(RGB和Alph)加載.png文件,但沒有運氣。看起來,openCV將第4個通道從圖像中剝離出來。是否有任何方法可以加載包含Alpha通道的完整4通道的圖像,即使我必須修改OpenCV源代碼並重新構建該圖像OpenCV:如何使用4個通道加載png圖像?
回答
顯然,OpenCV仍然不支持帶Alpha通道的PNG。
還有hacks to bypass這個。
根據documentation,OpenCV支持PNG上的alpha通道。
就叫使用CV_LOAD_IMAGE_UNCHANGED作爲這樣的標誌的imread功能:
cvLoadImage("file.png", CV_LOAD_IMAGE_UNCHANGED)
根據此回覆中的鏈接[閱讀和寫作圖像和視頻](http:///docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html),只需將負數作爲標誌。在'/ usr/include/opencv2/highgui/highgui_c.h'中沒有提到'CV_LOAD_IMAGE_UNCHANGED',但它確實在Ubuntu 14.04的股票OpenCV包中有效。 – 2015-11-02 16:09:52
如果您正在使用OpenCV的2或3的OpenCV你應該使用IMREAD_ *標誌(截至here提到)。
C++
using namespace cv;
Mat image = imread("image.png", IMREAD_UNCHANGED);
的Python
import cv2
im = cv2.imread("image.png", cv2.IMREAD_UNCHANGED)
奇怪的是[閱讀和寫作圖像和視頻](http://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html)沒有提到那些命名常量。 – 2015-11-02 16:12:27
我大概是通過閱讀源代碼:) – 2016-01-13 18:52:28
讀取透明PNG正確的方法是使用第四通道作爲alpha通道。大部分時間想要白色背景,如果是這種情況,那麼下面的代碼可以用於alpha合成。
def read_transparent_png(filename):
image_4channel = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
alpha_channel = image_4channel[:,:,3]
rgb_channels = image_4channel[:,:,:3]
# White Background Image
white_background_image = np.ones_like(rgb_channels, dtype=np.uint8) * 255
# Alpha factor
alpha_factor = alpha_channel[:,:,np.newaxis].astype(np.float32)/255.0
alpha_factor = np.concatenate((alpha_factor,alpha_factor,alpha_factor), axis=2)
# Transparent Image Rendered on White Background
base = rgb_channels.astype(np.float32) * alpha_factor
white = white_background_image.astype(np.float32) * (1 - alpha_factor)
final_image = base + white
return final_image.astype(np.uint8)
詳細的博客是這裏here。
- 1. 如何使用圖像4個通道
- 2. 如何從PNG圖像中刪除第4個通道
- 3. 如何將通過http post發送的png圖像加載到OpenCV IplImage格式
- 4. OpenCV:加載多個圖像
- 5. 在OpenCV中編寫4個以上的通道圖像Python
- 6. 加載圖像Opencv
- 7. 如何檢查加載到FMX.TBitmap的PNG圖像是否有alpha通道?
- 8. 加載OpenCV :: mat圖像與opengl紋理中的alpha通道
- 9. 無法使用OpenCV加載圖像
- 10. 在Android中使用OpenCV加載圖像
- 11. 使用opencv加載BytesIO圖像
- 12. 覆蓋4通道圖像
- 13. 如何在C++中使用opencv來縫合4個圖像
- 14. 如何使用MFC加載.png,.jpeg圖像?
- 15. opencv的 - 創建PNG圖像
- 16. 如何使用OpenCv疊加圖像?
- 17. OpenCV錯誤:通道數量不佳(源圖像必須有1,3或4通道)
- 18. OpenCV 2.4 JPEG到alpha通道PNG
- 19. OpenCV無法加載圖像
- 20. 加載圖像(opencv/C++)
- 21. 將4通道圖像轉換爲3通道圖像
- 22. 如何使用OpenCV加載存儲在文件中的圖像
- 23. 使用通用圖像加載器加載圖像使用圖像路徑
- 24. 如何用KineticJS將另一個PNG圖像掩蓋PNG圖像?
- 25. 通用圖像加載器 - 如何將第二個圖像加載到ImageView中?
- 26. 如何使用Glide Library通過圖像加載圖像?
- 27. tf_cc_binary()使opencv無法加載圖像
- 28. Golang - 使用圖像和圖像/ PNG交換圖片的PNG頻道
- 29. 使用OpenCV多通道沿通道方向訪問像素Mat
- 30. 如何強制python寫入3通道png圖像
@karlphilip:這不是真的了。也許刪除/編輯你的答案。請參閱此處的示例:https://stackoverflow.com/questions/23562207/image-change-the-shape-when-displaying#23562497 – 2014-05-09 10:48:54