File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 67, in <module> img_enhanced = MSRCR(img, [15, 80, 200], 3.0, 25.0, 125.0, 55.0, 0.01, 0.99) File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 50, in MSRCR img_retinex = multiScaleRetinex(intensity, sigma_list) #进行多尺度Retinex算法增强 File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 13, in multiScaleRetinex retinex += singleScaleRetinex(img, sigma) numpy.core._exceptions.UFuncTypeError: Cannot cast ufunc 'add' output from dtype('float16') to dtype('uint8') with casting rule 'same_kind'
时间: 2023-11-27 08:53:13 浏览: 169
这个错误是因为在进行多尺度Retinex算法增强时,计算出的增强后的像素值使用了float16类型,但是在计算完成后需要将其转换为uint8类型的像素值,而两者类型不兼容。可能的解决方案是在计算完成后将像素值转换为uint8类型,可以使用numpy的astype()方法将其转换为uint8类型。例如,可以尝试将第50行的代码修改为:
```img_retinex = multiScaleRetinex(intensity, sigma_list).astype(np.uint8)```
这样,计算出的像素值将被强制转换为uint8类型,避免了类型不兼容的错误。
相关问题
Traceback (most recent call last): File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang2.py", line 70, in <module> enhanced_image = MSRCR(image) File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang2.py", line 41, in MSRCR img_color[:, :, i] = np.divide(img[:, :, i], img_sum) ValueError: operands could not be broadcast together with shapes (480,640) (480,640,3)
这个错误是因为在MSRCR函数中,img_sum是一个(480,640)的数组,而img_color是一个(480,640,3)的数组。在尝试将img[:, :, i]除以img_sum时,两者的形状不匹配,导致了这个错误。你可以先使用np.expand_dims()函数将img_sum的维度扩展为(480,640,3),然后再进行除法操作。例如:
```
img_sum_expanded = np.expand_dims(img_sum, axis=2)
img_color = np.zeros_like(img)
for i in range(3):
img_color[:, :, i] = np.divide(img[:, :, i], img_sum_expanded)
```
这样就可以避免这个错误了。
怎么改File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 66, in <module> img_enhanced = MSRCR(img, [15, 80, 200], 3.0, 25.0, 125.0, 55.0, 0.01, 0.99) File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 48, in MSRCR img_retinex = multiScaleRetinex(img, sigma_list) #进行多尺度Retinex算法增强 File "/media/linux/643A-4CF3/code/SelfDeblur-master/hsizengqiang4.py", line 10, in multiScaleRetinex hsi_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.error: OpenCV(4.6.0) /croot/opencv-suite_1676452025216/work/modules/imgproc/src/color.simd_helpers.hpp:94: error: (-2:Unspecified error) in function 'cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{anonymous}::Set<3>; VDepth = cv::impl::{anonymous}::Set<0, 5>; cv::impl::{anonymous}::SizePolicy sizePolicy = cv::impl::<unnamed>::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]' > Unsupported depth of input image: > 'VDepth::contains(depth)' > where > 'depth' is 6 (CV_64F)
这个错误是因为输入的图像深度不被支持。在这种情况下,你可以尝试将图像转换为另一种深度,例如使用cv2.cvtColor()函数将图像从64位浮点数转换为8位无符号整数。可以使用以下代码解决此问题:
```
img = cv2.cvtColor(img.astype(np.float32), cv2.COLOR_BGR2HSV).astype(np.uint8)
```
这将先将图像转换为32位浮点数,然后将其转换为8位无符号整数类型。这应该可以解决这个问题。
阅读全文