⑴ python怎么在一群点集中,提取中心坐标
回答你的问题费老大劲了,opencv用的不熟
我运行输出:
row=14,col=5
14 5 248 242 234 237
gray2 crop: 220 232 219 5
中心点坐标(109,108),图片宽高(w=218, h=217)
[95, 134] [83, 173]
斜率k= 3.25
#解题思路:因为我下载的你的图片,黑色周围还有白色,所以先去除了周围的白色,保证只有黑色部分图片
#对图片转灰度图,这样方便计算,每个像素点的值就是一个0-255的值,0为黑色,255为白色
#然后获得灰度图的row和col,与正常思维的width和height相反,row对应height,col对应width
#遍历row和col,先获得第一个白点,再获得最后一个白点,然后根据这两个坐标执行tan计算斜率k值
#读取图像
img2=cv2.imread("../img/blackWhite.png")
#转成单通道黑白图
gray=cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY)
cv2.imshow('img2',img2)
cv2.imshow('gray',gray)
sp=gray.shape
rows=sp[0]
cols=sp[1]
cr=0
cl=0
#裁剪左边和上边空白
forrowinrange(rows):
isBreak=False
forcolinrange(cols):
ifgray[row,col]==0:
cr=row
cl=col
print(" row=%d,col=%d"%(row,col))
isBreak=True
break
#print(gray[row,col],end='')
#if(col==cols-1):
#print(" row=%d,col=%d-------------------------------"%(row,col))
ifisBreak==True:
break
print(cr,cl,rows,cols,rows-cr,cols-cl)
gray2=gray[cr:rows-cr,cl:cols-cl]
cv2.imshow('gray2',gray2)
#裁剪右下角空白
sp=gray2.shape
rows=sp[0]
cols=sp[1]
row=rows-1
print("gray2crop:",rows,cols,row,col)
whilerow!=0:
isBreak=False
col=cols-1
whilecol!=0:
ifgray2[row,col]==0:
isBreak=True
break
col-=1
ifisBreak==True:
break
row-=1
gray3=gray2[0:row+1,0:col+1]
cv2.imshow('gray3',gray3)
#对裁剪后的gray3求中心点坐标
sp=gray3.shape
rows=sp[0]
cols=sp[1]
x=cols//2
y=rows//2
print("中心点坐标(%d,%d),图片宽高(w=%d,h=%d)"%(x,y,cols,rows))
#求斜率(y2-y1)/(x2-x1)
#遍历出第一个白点和最后一个白点,做计算
x1y1=[]
x2y2=[]
#求第一个白点坐标
forrowinrange(rows):
isBreak=False
forcolinrange(cols):
ifgray3[row,col]==255:
x1y1.append(col)
x1y1.append(row)
isBreak=True
break
ifisBreak==True:
break
#求最后一个白点坐标
row=rows-1
whilerow!=0:
isBreak=False
col=cols-1
whilecol!=0:
ifgray2[row,col]==255:
x2y2.append(col)
x2y2.append(row)
isBreak=True
break
col-=1
ifisBreak==True:
break
row-=1
print(x1y1,x2y2)
#计算斜率tan值
k=abs(x2y2[1]-x1y1[1])/abs(x2y2[0]-x1y1[0])
print("斜率k=",k)
cv2.waitKey(0)
cv2.destroyAllWindows()
⑵ 怎样利用Python进行图片分析
fromPILimportImage###此处为导出包,注意字母大小写
importos,os.path
#指明被遍历的文件夹
rootdir=os.path.abspath(os.curdir)+'/Image/'
rootdir1=os.path.abspath(os.pardir)+"/Image/"
#打包用
ifos.path.isdir(rootdir):
pass
else:
rootdir=rootdir1
size=315,560
i=0
forparent,dirnames,filenamesinos.walk(rootdir):
forfilenameinfilenames:
infile=os.path.join(parent,filename)
im=Image.open(infile)###此处Image.open(dir)为多数对象应用的基础.
im.thumbnail(size)###此处size为长度为2的tuple类型,改变图片分辨率
im.save(infile)###im.save(dir),图片处理的最后都用这个,就是保存处理过后的图片
i+=1
print(i,"Done")
要用pil包 安装如下:pipinstallpillow
⑶ python图像处理库 哪个好 知乎
1.scikit-image
scikit-image是一个开源的Python包,适用于numpy数组。它实现了用于研究,教育和工业应用的算法和实用工具。即使是那些刚接触Python生态系统的人,它也是一个相当简单直接的库。此代码是由活跃的志愿者社区编写的,具有高质量和同行评审的性质。
2.Numpy
Numpy是Python编程的核心库之一,并为数组提供支持。图像本质上是包含数据点像素的标准Numpy数组。因此,我们可以通过使用基本的NumPy操作,例如切片、掩膜和花式索引,来修改图像的像素值。可以使用skimage加载图像并使用matplotlib显示图像。
3.Scipy
scipy是Python的另一个类似Numpy的核心科学模块,可用于基本的图像操作和处理任务。特别是子模块scipy.ndimage,提供了在n维NumPy数组上操作的函数。该包目前包括线性和非线性滤波,二值形态学,B样条插值和对象测量等功能函数。
4. PIL/Pillow
PIL是Python编程语言的一个免费库,它支持打开、操作和保存许多不同的文件格式的图像。然而,随着2009年的最后一次发布,它的开发停滞不前。但幸运的是还有Pillow,一个PIL积极开发的且更容易安装的分支,它能运行在所有主要的操作系统,并支持Python3。这个库包含了基本的图像处理功能,包括点运算、使用一组内置卷积核的滤波和色彩空间的转换。
5.OpenCV-Python
OpenCV是计算机视觉应用中应用最广泛的库之一
。OpenCV-Python是OpenCV的python版API。OpenCV-Python的优点不只有高效,这源于它的内部组成是用C/C++编写的,而且它还容易编写和部署。这使得它成为执行计算密集型计算机视觉程序的一个很好的选择。
6.SimpleCV
SimpleCV也是一个用于构建计算机视觉应用程序的开源框架。有了它,你就可以访问几个高性能的计算机视觉库,如OpenCV,而且不需要先学习了解位深度、文件格式、颜色空间等。它的学习曲线大大小于OpenCV,正如它们的口号所说“计算机视觉变得简单”。
7.Mahotas
Mahotas是另一个计算机视觉和图像处理的Python库。它包括了传统的图像处理功能例如滤波和形态学操作以及更现代的计算机视觉功能用于特征计算,包括兴趣点检测和局部描述符。该接口是Python语言,适合于快速开发,但是算法是用C语言实现的,并根据速度进行了调优。Mahotas库速度快,代码简洁,甚至具有最小的依赖性。
8.SimpleITK
ITK或者Insight Segmentation and Registration
Toolkit是一个开源的跨平台系统,为开发人员提供了一套广泛的图像分析软件工具
。其中,SimpleITK是建立在ITK之上的简化层,旨在促进其在快速原型设计、教育、解释语言中的应用。SimpleITK是一个图像分析工具包,包含大量支持一般过滤操作、图像分割和匹配的组件。SimpleITK本身是用C++写的,但是对于包括Python以内的大部分编程语言都是可用的。
9.pgmagick
pgmagick是GraphicsMagick库的一个基于python的包装。GraphicsMagick图像处理系统有时被称为图像处理的瑞士军刀。它提供了一个具有强大且高效的工具和库集合,支持以88种主要格式读取、写入和操作图像。
10.Pycairo
Pycairo是图像处理库cairo的一组Python捆绑。Cairo是一个用于绘制矢量图形的2D图形库。矢量图形很有趣,因为它们在调整大小或转换时不会失去清晰度。Pycairo是cairo的一组绑定,可用于从Python调用cairo命令。
⑷ python怎么用PIL模块处理BMP图像 二值化
Pillow 提供了一个 .load() 方法,用来处理像素。图片嘛,当然是二维的,有宽和高的。
pixels = image.load()
for x in ramge(image.width):
for y in range(image.height):
pixsels[x, y] = 255 if pixsels[x, y] > 125 else 0
当然了,只是最简单的二值化的话,直接 image.convert('1') 就可以了 :-)