Я пытаюсь улучшить качество изображения в градациях серого с помощью Skimage и Scipy, а затем использую их в cv2. К сожалению, я получаю сообщение об ошибке, когда пытаюсь преобразовать изображение лыжи с помощью cv2.
Изображение:
import skimage
import scipy
import cv2
import matplotlib.pyplot as plt
img = cv2.imread('Image.png')
scale = 5
img_rs = skimage.transform.rescale(image = img,
scale = scale,
order = 3,
mode = 'wrap',
cval = 0,
multichannel = True,
anti_aliasing = 'none')
img_int = scipy.misc.imresize(img_rs, 0.99999, interp = 'cubic')
img_int_gray = skimage.color.rgb2gray(img_int)
blurred_img = scipy.ndimage.gaussian_filter(img_int_gray, 3)
filter_blurred_img = scipy.ndimage.gaussian_filter(blurred_img, 1)
alpha = 30
sharp_img = blurred_img + alpha * (blurred_img - filter_blurred_img)
#error
img_gs = cv2.cvtColor(sharp_img, cv2.COLOR_BGR2GRAY)
plt.imsave('sharp_img.png', img_gs, cmap = 'gray')
Выход:
Traceback (most recent call last):
File "/home/artur/Desktop/test.py", line 25, in <module>
img_gs = cv2.cvtColor(sharp_img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(3.4.3) /io/opencv/modules/imgproc/src/color.hpp:255: error: (-2:Unspecified error) in function 'cv::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::Set<3, 4>; VDcn = cv::Set<1>; VDepth = cv::Set<0, 2, 5>; cv::SizePolicy sizePolicy = (cv::SizePolicy)2u; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Invalid number of channels in input image:
> 'VScn::contains(scn)'
> where
> 'scn' is 1
Теперь я прочитал, что skimage и cv2 используют разные форматы, поэтому я попытался добавить эту строку перед преобразованием в cv2, что должно сделать его совместимым с cv2:
sharp_img = skimage.img_as_ubyte(sharp_img)
Выход:
Traceback (most recent call last):
File "/home/artur/Desktop/test.py", line 23, in <module>
sharp_img = skimage.img_as_ubyte(sharp_img)
File "/home/artur/.local/lib/python3.6/site-packages/skimage/util/dtype.py", line 492, in img_as_ubyte
return convert(image, np.uint8, force_copy)
File "/home/artur/.local/lib/python3.6/site-packages/skimage/util/dtype.py", line 261, in convert
raise ValueError("Images of type float must be between -1 and 1.")
ValueError: Images of type float must be between -1 and 1.
Что я делаю не так?