cv2.cvtColor 将图像转换为 HSV 时出错(使用 cv2.COLOR_BGR2HSV)
Error in cv2.cvtColor converting an image to HSV (using cv2.COLOR_BGR2HSV)
当我从一个文件夹中打开多个图像并尝试将每个图像转换为 BGR2HSV 时,我收到此错误:
Traceback (most recent call last):
File "create_gestures_manual.py", line 123, in
get_img(lab_path)
File "create_gestures_manual.py", line 114, in get_img
store_images(g_id, dirr)
File "create_gestures_manual.py", line 61, in store_images
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.error: OpenCV(4.5.2) /tmp/pip-req-build-wu1ri_rx/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: 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::::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
Invalid number of channels in input image:
'VScn::contains(scn)'
where
'scn' is 1
下面是我的代码片段:
while True:
framee = cv2.imread(dirr,0)
img = cv2.flip(framee, 1)
cv2.imshow('IMG',img)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
这是什么意思?。请帮帮我。以及如何解决这个问题
您将图像读为灰度图像。
更改此部分:
framee = cv2.imread(dirr)
获得 bgr 图像,然后将 bgr 转换为 hsv。
错误的来源是framee
是单通道灰度图像(img
也是基于它创建的)。它不是 3 通道彩色图像,因此不能直接转换为 hsv。
在这个link中可以看到:imread
,第2个参数flags
决定了读取图片的格式
在您的代码中,您使用 0
,它在内部映射到 IMREAD_GRAYSCALE
。因此,即使您的图像文件包含 rgb 图像,它也会被转换为 1 通道灰度。
由于 flags
的默认值是 IMREAD_COLOR
,您可以简单地使用:
framee = cv2.imread(dirr)
附带说明:即使您不想要此默认值,也建议使用 opencv 枚举值(例如 cv2.IMREAD_GRAYSCALE
)而不是整数。这样做你永远不会遇到这个问题。
当我从一个文件夹中打开多个图像并尝试将每个图像转换为 BGR2HSV 时,我收到此错误:
Traceback (most recent call last): File "create_gestures_manual.py", line 123, in get_img(lab_path) File "create_gestures_manual.py", line 114, in get_img store_images(g_id, dirr) File "create_gestures_manual.py", line 61, in store_images imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) cv2.error: OpenCV(4.5.2) /tmp/pip-req-build-wu1ri_rx/opencv/modules/imgproc/src/color.simd_helpers.hpp:92: 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::::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
Invalid number of channels in input image: 'VScn::contains(scn)' where 'scn' is 1
下面是我的代码片段:
while True:
framee = cv2.imread(dirr,0)
img = cv2.flip(framee, 1)
cv2.imshow('IMG',img)
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
这是什么意思?。请帮帮我。以及如何解决这个问题
您将图像读为灰度图像。 更改此部分:
framee = cv2.imread(dirr)
获得 bgr 图像,然后将 bgr 转换为 hsv。
错误的来源是framee
是单通道灰度图像(img
也是基于它创建的)。它不是 3 通道彩色图像,因此不能直接转换为 hsv。
在这个link中可以看到:imread
,第2个参数flags
决定了读取图片的格式
在您的代码中,您使用 0
,它在内部映射到 IMREAD_GRAYSCALE
。因此,即使您的图像文件包含 rgb 图像,它也会被转换为 1 通道灰度。
由于 flags
的默认值是 IMREAD_COLOR
,您可以简单地使用:
framee = cv2.imread(dirr)
附带说明:即使您不想要此默认值,也建议使用 opencv 枚举值(例如 cv2.IMREAD_GRAYSCALE
)而不是整数。这样做你永远不会遇到这个问题。