Python 使用numpy和cv2操作大型二值图像阵列
我的代码如下:Python 使用numpy和cv2操作大型二值图像阵列,python,arrays,opencv,numpy,Python,Arrays,Opencv,Numpy,我的代码如下: import cv2; import numpy as np class MyClass: def __init__(self,imagefile): self.image = cv2.imread(imagefile) #image details self.h,self.w = self.image.shape[:2] #self.bPoints, self.wPoints = np.array([[
import cv2; import numpy as np
class MyClass:
def __init__(self,imagefile):
self.image = cv2.imread(imagefile)
#image details
self.h,self.w = self.image.shape[:2]
#self.bPoints, self.wPoints = np.array([[0,0]]),np.array([[0,0]])
self.bPoints, self.wPoints = [],[]
#CAUTION! Points are of the form (y,x)
# Point filtering
for i in xrange(self.h):
for j in xrange(self.w):
if self.th2.item(i,j) == 0:
#self.bPoints = np.append([[i,j]], self.bPoints, axis=0)
self.bPoints.append((i,j))
else:
self.wPoints.append((i,j))
#self.wPoints = np.append([[i,j]], self.wPoints, axis=0)
#self.bPoints = self.bPoints[:len(self.bPoints) - 1]
#self.wPoints = self.wPoints[:len(self.wPoints) - 1]
self.bPoints, self.wPoints = np.array(self.bPoints), np.array(self.wPoints)
我想找到并区分黑点和白点。我已经评论了通过numpy显示可能(但非常慢)解决方案的行。你能给我推荐一个更好更快的解决方案吗?如果你这样做,我将不胜感激
谢谢我假设
self.th2
是一个numpy数组。如果不是这样的话,这可能需要一些调整。基本上,它使用np.where
函数来确定0
或255
的所有索引
import cv2; import numpy as np
class MyClass:
def __init__(self,imagefile):
self.image = cv2.imread(imagefile)
#image details
self.h,self.w = self.image.shape[:2]
#self.bPoints, self.wPoints = np.array([[0,0]]),np.array([[0,0]])
self.bPoints, self.wPoints = [],[]
#CAUTION! Points are of the form (y,x)
# use the np.where method instead of a double loop.
# make sure self.th2 is a numpy array
indx = np.where(self.th2==0)
for i,j in zip(indx[0], indx[1]):
self.bPoints.append((i,j))
indx = np.where(self.th2==255)
for i,j in zip(indx[0], indx[1]):
self.wPoints.append((i,j))
# Point filtering
#for i in xrange(self.h):
# for j in xrange(self.w):
# if self.th2.item(i,j) == 0:
# #self.bPoints = np.append([[i,j]], self.bPoints, axis=0)
# self.bPoints.append((i,j))
# else:
# self.wPoints.append((i,j))
# #self.wPoints = np.append([[i,j]], self.wPoints, axis=0)
#self.bPoints = self.bPoints[:len(self.bPoints) - 1]
#self.wPoints = self.wPoints[:len(self.wPoints) - 1]
self.bPoints, self.wPoints = np.array(self.bPoints), np.array(self.wPoints)
也许它需要添加一个句子来说明您试图实现的目标。正如我上面提到的,我想将二值图像的黑点附加到
self.b点
,将白点附加到self.wPoints
数组,其形状为(2,2)
谢谢!快多了!但是请注意,白色的值是255,而不是1。我想的是np.where()
,但我不知道如何操作它!这无疑是制作索引的好方法!