Error: OpenCV, Unsupported depth of input image
Error: OpenCV, Unsupported depth of input image
我想创建一个随机改变图片亮度的函数。
我有这个导入:
import math
import random
import numpy as np
import cv2
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.colors import Colormap
from mpl_toolkits.axes_grid1 import ImageGrid
from io import BytesIO
from google.colab import files
然后我将图像上传到我的 google colab 工作区:
uploaded = files.upload()
im = Image.open(BytesIO(uploaded['aug_cat.jpg']))
plt.imshow(im)
plt.show()
然后我得到 this picture。然后我这样做是为了将我的图像转换成浮点数:
img = cv2.imread('aug_cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(float) / 255
最后我尝试使用这个功能:
def aug_bright(img, factor = random.uniform(-10, 10)):
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
hsv = np.array(hsv, dtype=np.float64)
hsv[:, :, 2] = hsv[:, :, 2] * (factor)
hsv[:, :, 2][hsv[:, :, 2] > 255] = 255
img = cv2.cvtColor(cv2.UMat(im), cv2.COLOR_HSV2RGB)
return img
我尝试调用这个函数并显示结果:
bright_img = aug_bright(img)
plt.imshow(bright_img)
plt.show()
但是我有这个错误:
error: OpenCV(4.1.2) /io/opencv/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>::SizePolicy)2u; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Unsupported depth of input image:
> 'VDepth::contains(depth)'
> where
> 'depth' is 6 (CV_64F)
我该如何解决?有什么问题?
你为什么不用ImageEnhance method?通过 factor
你可以改变图像的亮度。例如
from PIL import Image, ImageEnhance
#read the image
im = Image.open("sample-image.png")
#image brightness enhancer
enhancer = ImageEnhance.Brightness(im)
factor = 1 #gives original image
im_output = enhancer.enhance(factor)
im_output.save('original-image.png')
factor = 0.5 #darkens the image
im_output = enhancer.enhance(factor)
im_output.save('darkened-image.png')
factor = 1.5 #brightens the image
im_output = enhancer.enhance(factor)
im_output.save('brightened-image.png')
所以我的任务是编写自己的函数,这就是为什么我没有使用一些支持库的原因。
我已经这样解决了我的问题。
首先,我的进口:
import math
import random
import numpy as np
import cv2
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.colors import Colormap
from mpl_toolkits.axes_grid1 import ImageGrid
from io import BytesIO
from google.colab import files
其次,一些google colab 下载和数据准备:
uploaded = files.upload()
im = Image.open(BytesIO(uploaded['aug_cat.jpg']))
img = cv2.imread('aug_cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(np.float32, copy=False)
imgUMat = np.float32(img)
第三,我的自定义函数:
def aug_bright(imgUMat, factor = random.uniform(-10, 10)):
"""
Random brightness change
"""
hsv = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2HSV)
hsv = np.array(hsv, dtype=np.float32)
hsv[:, :, 2] = hsv[:, :, 2] * (factor)
hsv[:, :, 2][hsv[:, :, 2] > 255] = 255
imgUMat = cv2.cvtColor(cv2.UMat(imgUMat), cv2.COLOR_HSV2RGB)
return img
我是这样称呼它的:
bright_img = aug_bright(imgUMat)
plt.imshow(bright_img)
plt.show()
希望我的回答对大家有用。
我想创建一个随机改变图片亮度的函数。
我有这个导入:
import math
import random
import numpy as np
import cv2
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.colors import Colormap
from mpl_toolkits.axes_grid1 import ImageGrid
from io import BytesIO
from google.colab import files
然后我将图像上传到我的 google colab 工作区:
uploaded = files.upload()
im = Image.open(BytesIO(uploaded['aug_cat.jpg']))
plt.imshow(im)
plt.show()
然后我得到 this picture。然后我这样做是为了将我的图像转换成浮点数:
img = cv2.imread('aug_cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(float) / 255
最后我尝试使用这个功能:
def aug_bright(img, factor = random.uniform(-10, 10)):
hsv = cv2.cvtColor(img, cv2.COLOR_RGB2HSV)
hsv = np.array(hsv, dtype=np.float64)
hsv[:, :, 2] = hsv[:, :, 2] * (factor)
hsv[:, :, 2][hsv[:, :, 2] > 255] = 255
img = cv2.cvtColor(cv2.UMat(im), cv2.COLOR_HSV2RGB)
return img
我尝试调用这个函数并显示结果:
bright_img = aug_bright(img)
plt.imshow(bright_img)
plt.show()
但是我有这个错误:
error: OpenCV(4.1.2) /io/opencv/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>::SizePolicy)2u; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Unsupported depth of input image:
> 'VDepth::contains(depth)'
> where
> 'depth' is 6 (CV_64F)
我该如何解决?有什么问题?
你为什么不用ImageEnhance method?通过 factor
你可以改变图像的亮度。例如
from PIL import Image, ImageEnhance
#read the image
im = Image.open("sample-image.png")
#image brightness enhancer
enhancer = ImageEnhance.Brightness(im)
factor = 1 #gives original image
im_output = enhancer.enhance(factor)
im_output.save('original-image.png')
factor = 0.5 #darkens the image
im_output = enhancer.enhance(factor)
im_output.save('darkened-image.png')
factor = 1.5 #brightens the image
im_output = enhancer.enhance(factor)
im_output.save('brightened-image.png')
所以我的任务是编写自己的函数,这就是为什么我没有使用一些支持库的原因。
我已经这样解决了我的问题。
首先,我的进口:
import math
import random
import numpy as np
import cv2
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.colors import Colormap
from mpl_toolkits.axes_grid1 import ImageGrid
from io import BytesIO
from google.colab import files
其次,一些google colab 下载和数据准备:
uploaded = files.upload()
im = Image.open(BytesIO(uploaded['aug_cat.jpg']))
img = cv2.imread('aug_cat.jpg')
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(np.float32, copy=False)
imgUMat = np.float32(img)
第三,我的自定义函数:
def aug_bright(imgUMat, factor = random.uniform(-10, 10)):
"""
Random brightness change
"""
hsv = cv2.cvtColor(imgUMat, cv2.COLOR_RGB2HSV)
hsv = np.array(hsv, dtype=np.float32)
hsv[:, :, 2] = hsv[:, :, 2] * (factor)
hsv[:, :, 2][hsv[:, :, 2] > 255] = 255
imgUMat = cv2.cvtColor(cv2.UMat(imgUMat), cv2.COLOR_HSV2RGB)
return img
我是这样称呼它的:
bright_img = aug_bright(imgUMat)
plt.imshow(bright_img)
plt.show()
希望我的回答对大家有用。