如何只读取输入图像的一部分而不创建另一个图像?

时间:2018-06-14 09:31:10

标签: python opencv image-processing pillow cv2

import cv2

fname = '1.png'
img=cv2.imread(fname, 0)
print (img)//the outcome is an array of values from 0 to 255 (grayscale)
ret, thresh = cv2.threshold(img, 254, 255, cv2.THRESH_BINARY)
thresh = cv2.bitwise_not(thresh)
nums, labels = cv2.connectedComponents(thresh, None, 4, cv2.CV_32S)
dst = cv2.convertScaleAbs(255.0*labels/nums)
cv2.imwrite(dest_dir+"output.png", dst)

该代码工作得很好,所以我继续调整我的代码,这样它可以拍摄部分图像而不是整个图像:

from PIL import Image

    img = Image.open(fname)
    img2 = img.crop((int(xmin), int(yMin),int(xMax), int(yMax))

xmin ymin xmax ymax只是框的左上角右下角坐标。 然后我做img = cv2.imread(img2)继续作为前面的代码,但得到一个错误,我打印img2并得到<PIL.Image.Image image mode=RGB size=54x10 at 0x7F4D283AFB70>我如何调整它,以便能够在我的代码中输入裁剪或图像部分而不是fname以上,请注意我不想将img2保存为图像并从那里继续进行,因为我需要处理主图像。

2 个答案:

答案 0 :(得分:1)

尝试cv2.imshow()而不是打印它。要查看裁剪的图像,需要使用cv2函数。这是一个示例代码:

import numpy as np
import cv2
# Load an color image in grayscale
img = cv2.imread('messi5.jpg',0)
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

答案 1 :(得分:0)

简单的答案是你不能。

打开终端/ IDE并输入help(cv2.imread)

它明确指出函数imread从指定文件加载图像并返回它。因此,为了使用cv2.imread(),您必须将其作为文件传递 not 图片。

您最好的选择是将裁剪后的图像保存为文件,然后将其读取。