如何将图像划分为块并使用opencv合并回去。我已经将图像划分为块,但是我没有获得如何通过重复数据删除将其合并回去。 这是我的将图像划分为块的代码
`import time
import cv2
import numpy as np
from hashlib import md5
hashs=[]
def compute_image_path(path):
img=cv2.imread(path)
#img=cv2.resize(img,(512,512))
print(img.shape)
print(img.size/1024)
start=time.time()
imgs=np.split(img,8,axis=0)
for i,ix in enumerate(imgs):
ig=np.split(ix,8,axis=1)
for j,iy in enumerate(ig):
if(j==1):
cv2.imshow(str(i*8+j),iy)
cv2.imwrite("C:\\Users\\prave\\Desktop\\Comp\\"+str(i*8+j)+".jpg",iy)
hashs.append(md5(iy.tostring()).hexdigest())
end=time.time()
print(end-start)
print(len(hashs))
print(len(set(hashs)))
cv2.waitKey(0)
print(hashs[0])
print(hashs[1])
if __name__ == "__main__":
#img=np.zeros((512,512,3))
#img[:200,:,0]=100
#img[200:400,:,1]=100
#img[400:,:,2]=100
#cv2.imshow("input",img)
#cv2.waitKey(0)
compute_image_path("C:\\Users\\prave\\Desktop\\IMG_2849.jpg")`
答案 0 :(得分:0)
解决此问题的一种方法是使用numpy.block
,它将块堆叠在一起:
import numpy as np
# 20x20 image
img = np.random.randint(0,9,(20,20))
# List of 4 5x20 image slices
sliced = np.split(img,4,axis=0)
# List of 4 lists of 4 5x5 image blocks
blocks = [np.split(img_slice,4,axis=1) for img_slice in sliced]
# stacking them back together
img_stacked = np.block(blocks)
# testing if the stacking works right
print((img==img_stacked).all())
但是,仅当您具有正确顺序的列表列表时(第一个拆分轴0,然后是轴1),此方法才有效。通常,hstack
,vstack
或concatenate
可以将较小的数组(图像)组合在一起。