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保存为图像并从那里继续进行,因为我需要处理主图像。
答案 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 图片。
您最好的选择是将裁剪后的图像保存为文件,然后将其读取。