使用OpenCV和Python将图像居中

使用OpenCV和Python将图像居中,python,opencv,Python,Opencv,我们的程序收集一系列图像,如图所示: 现在,我需要将“H”居中到50x50图像的中心(以便可以将其馈送到ML算法),如何继续 编辑:所有的输入数据都将类似于给定的图像,并且是灰度的。它们都将是字母(甚至是H) 有几种方法可以做到这一点。最快(但最简单)的方法是找到最左边和最右边的黑色像素,然后在中间点居中。然后做同样的垂直运动。基本上为你的图像创建一个边界框,在这里你可以过滤任何不是#FFFFFF 同样,这取决于数据。它们都是字母(甚至是H) 有几种方法可以做到这一点。最快(但最简单)的方法是

我们的程序收集一系列图像,如图所示:

现在,我需要将“H”居中到50x50图像的中心(以便可以将其馈送到ML算法),如何继续


编辑:所有的输入数据都将类似于给定的图像,并且是灰度的。

它们都将是字母(甚至是H)

有几种方法可以做到这一点。最快(但最简单)的方法是找到最左边和最右边的黑色像素,然后在中间点居中。然后做同样的垂直运动。基本上为你的图像创建一个边界框,在这里你可以过滤任何不是
#FFFFFF


同样,这取决于数据。

它们都是字母(甚至是H)

有几种方法可以做到这一点。最快(但最简单)的方法是找到最左边和最右边的黑色像素,然后在中间点居中。然后做同样的垂直运动。基本上为你的图像创建一个边界框,在这里你可以过滤任何不是
#FFFFFF


同样,这取决于数据。

您也可以使用Scikit image找到图像的重心(或您自己的函数),然后使用填充来转换图像?在Python中执行此操作的基本方法是:

im=numpy.zero((20,20))
im[2:6,2:14]=1
#确定质心
com=图像、测量值、质量中心(im)
打印(com)
#x轴和y轴上的平移距离
x_trans=int(im.shape[0]//2-com[0])
y_trans=int(im.shape[1]//2-com[1])
#从图像中填充并移除像素以执行转换
如果x_trans>0:
im2=numpy.pad(im,((x_trans,0),(0,0)),mode='constant')
im2=im2[:im.形状[0]-x_trans,:]
其他:
im2=numpy.pad(im,((0,-x_trans),(0,0)),mode='constant')
im2=im2[-x_trans:,:]
如果y_trans>0:
im3=numpy.pad(im2,((0,0),(y_trans,0)),mode='constant')
im3=im3[:,:im.形状[0]-y_trans]
其他:
im3=numpy.pad(im2,((0,0),(0,-y_trans)),mode='constant')
im3=im3[:,-y_trans:]
打印(图像.测量.质量中心(im3))

您也可以使用Scikit image查找图像的重心(或您自己的函数),然后使用填充来翻译图像?在Python中执行此操作的基本方法是:

im=numpy.zero((20,20))
im[2:6,2:14]=1
#确定质心
com=图像、测量值、质量中心(im)
打印(com)
#x轴和y轴上的平移距离
x_trans=int(im.shape[0]//2-com[0])
y_trans=int(im.shape[1]//2-com[1])
#从图像中填充并移除像素以执行转换
如果x_trans>0:
im2=numpy.pad(im,((x_trans,0),(0,0)),mode='constant')
im2=im2[:im.形状[0]-x_trans,:]
其他:
im2=numpy.pad(im,((0,-x_trans),(0,0)),mode='constant')
im2=im2[-x_trans:,:]
如果y_trans>0:
im3=numpy.pad(im2,((0,0),(y_trans,0)),mode='constant')
im3=im3[:,:im.形状[0]-y_trans]
其他:
im3=numpy.pad(im2,((0,0),(0,-y_trans)),mode='constant')
im3=im3[:,-y_trans:]
打印(图像.测量.质量中心(im3))

是的,所有图像都将是灰度的字母或数字。我会试试这个。谢谢:)是的,所有的图像都是灰度的字母或数字。我会试试这个。谢谢:)