【问题标题】:How can i read input only a part of the image without creating another image?如何在不创建另一个图像的情况下仅读取图像的一部分输入?
【发布时间】:2018-11-24 00:49:12
【问题描述】:
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 保存为图像并从那里继续,因为我需要处理主图像。

【问题讨论】:

  • 这正是我说我不想做的,请参考我问题的最后一部分。
  • 对不起我的错
  • 不用担心,感谢您的建议,如果您有办法让我以我想要的格式提供该图像部分,我很想听听其他人的建议。

标签: python opencv image-processing pillow cv2


【解决方案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()

【讨论】:

【解决方案2】:

简单的答案是你不能。

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

它明确指出函数imread从指定文件加载图像并返回。所以要使用cv2.imread(),您必须将其作为文件传入 strong> 一张图片。

最好的办法是将裁剪后的图像保存为文件,然后读取它。

【讨论】:

  • 是的,我在 opencv imread 文档中也看到了这一点,但希望有某种解决方法docs.opencv.org/3.0-beta/doc/py_tutorials/py_gui/… 有没有办法将我的第一个代码应用于图像区域而不是完整图像?只是保存它对我没有好处,我需要处理主图像。
  • 你有裁剪的图像,为什么不直接处理呢?
  • 因为我拥有的数据很糟糕而且它们被严重裁剪,就这么简单,所以我需要检查连接的组件到我在裁剪部分中已有的元素。
猜你喜欢
  • 1970-01-01
  • 2013-03-22
  • 2012-03-30
  • 2016-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多