我有一個從 ML 程式生成的掩碼,它是 (544,544,1)。RGB 影像為 (544,544,3)。我需要在遮罩中找到輪廓并將它們繪制在 RGB 影像上。我試圖將蒙版轉換為灰度,但所有嘗試都可能由于格式問題而失敗。
resized_image - 傳入的 RGB 影像
掩碼 - 從 ML 腳本生成的掩碼
print(f"Resized rgb image shape : {resized_image.shape}, Mask image shape {mask.shape}")
tmp_mask = np.zeros(resized_image.shape, dtype=np.uint8) 255
bump = tmp_mask * mask
print(bump.shape)
gray = cv2.cvtColor(bump, cv2.COLOR_RGB2GRAY)
輸出如下:
Resized rgb image shape : (544, 544, 3), Mask image shape (544, 544, 1)
(544, 544, 3)
---------------------------------------------------------------------------
error Traceback (most recent call last)
<ipython-input-33-07ef46f74c90> in <module>
12 bump = tmp_mask * mask
13 print(bump.shape)
---> 14 gray = cv2.cvtColor(bump, cv2.COLOR_RGB2GRAY)
15
16 #gray_image = cv2.cvtColor(bump, cv2.COLOR_BGR2GRAY)
error: OpenCV(4.5.5) d:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.simd_helpers.hpp:94: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<3,4,-1>,struct cv::impl::A0x7123906f::Set<1,-1,-1>,struct cv::impl::A0x7123906f::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
> Unsupported depth of input image:
> 'VDepth::contains(depth)'
> where
> 'depth' is 4 (CV_32S)
如何在這里解決格式問題(不支持的輸入影像深度)?有沒有其他更簡單的方法來找到掩碼影像中的輪廓?
uj5u.com熱心網友回復:
復制
cv2.cvtColor(np.ones((30,30,3), dtype=np.int32), cv2.COLOR_RGB2GRAY)
解釋
depth不是通道(陣列形狀的一部分),它是每個數字的位元組數。int32 將使用 4*8 位來表示整數,而 uint8 僅使用 1*8 位。
cvtColor需要np.float32,或np.uint8作為 dtype。
我們可以猜測tmp_mask.dtype==np.uint8
所以,請檢查變數dtype的maskprint(mask.dtype)
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/471812.html
上一篇:在機器學習服務中使用任何版本的DNN實作時出現OpenCV問題
下一篇:不同模板大小的模板匹配
