如何将openCV转换后的图像转换为原始形式

2024-09-27 04:26:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经把我的原始图像从200x200调整到128x128,因为opencv在默认情况下是在BGR中读取的,我处理了这个问题,但是在调整大小之后它变成了灰度(如预期的那样),但是我不能转换回它的RGB格式

orignal = cv2.imread(os.path.join("/path","some_image.png"),0)

rgb = cv2.cvtColor(orignal, cv2.COLOR_BGR2RGB)

resized = cv2.resize(rgb,(128,128))

backtorgb = cv2.cvtColor(resized,cv2.COLOR_GRAY2RGB)

plt.imshow(backtorgb)

最后一行给出错误:

error: OpenCV(4.0.0) /io/opencv/modules/imgproc/src/color.hpp:259: error: (-2:Unspecified error) in function 'cv::CvtHelper::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::Set<1>; VDcn = cv::Set<3, 4>; 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 3


Tags: pathimageerrorrgbcv2opencvcvcolor
2条回答

对于“调整大小”选项,可以尝试如下操作:

记住纵横比是很重要的,这样图像看起来不会倾斜或扭曲,所以我们需要计算新图像与旧图像的比率

image = cv2.imread(os.path.join("/path","some_image.png"),0) 
Ratio = 100.0 / image.shape[1]
        dimensions = (128, int(image.shape[0] * Ratio))

# perform the actual resizing of the image and show it
resized = cv2.resize(image, dimensions , interpolation = cv2.INTER_AREA)
cv2.imshow("resized", resized)
cv2.waitKey(0)

调整大小时发生了什么:

第一个参数是我们要调整大小的原始图像。第二个参数是我们先前在dimensions变量中计算的新图像的计算尺寸。第三个参数告诉我们使用哪种算法。在

如果您需要将图像从BGR转换为RGB,您应该能够在调整大小后立即执行此操作。你应该能够在转换它之前调整它的大小

使用cv2.resize()调整图像大小不应使彩色图像变为灰度。它只需将图像的大小调整到指定的大小。要将图像转换为灰度,请使用cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)。您的错误消息还确认调整大小的图像有3个颜色通道。这里确认cv2.resize()不会将图像变为灰度。在

example

import cv2

image_file = 'assets/color_palette.jpg'

original = cv2.imread(image_file)
cv2.imshow('original', original)

rgb = cv2.cvtColor(original, cv2.COLOR_BGR2RGB)
cv2.imshow('rgb', rgb)

resized = cv2.resize(rgb, (128,128))
cv2.imshow('resized', resized)

key = cv2.waitKey(0)

相关问题 更多 >

    热门问题