plt.show 显示的是图像的函数
plt.imshow 显示的是图像本身
在读取mask以后,如果是二类,ROI和背景,ROI为255(白色),背景为0(黑色),一定要检查读取后的mask是否真的unique为[0,255]
因为实验室另一位同学给我的mask,我以为他已经处理好的了,结果调试的时候出现了异常,后来检查存在这个问题
我的解决方案是小于127置为0,大于127置为255。
# demo
import numpy as np
import cv2
from skimage import io
fpath='D:/Python/mask-vae-recontruct/FaceReconstructionWithVAEAndFaceMasks-main/patch/masks/1918240018_OD_156_5.jpg'
mask=io.imread(fpath)
io.imshow(mask)



import numpy as np
import cv2
from skimage import io
fpath='D:/Python/mask-vae-recontruct/FaceReconstructionWithVAEAndFaceMasks-main/patch/masks/1918240018_OD_156_5.jpg'
mask=io.imread(fpath)
mask[mask<127]=0
mask[mask>=127]=255
io.imshow(mask)


thickness 为正表示线的粗细
import numpy as np
import cv2
fpath='D:\sever\circle\zebra.jpg'
img=cv2.imread(fpath)
cv2.circle(img,(150,150),100,(0,0,0))
cv2.imshow('zebra.jpg',img)

thickness为-1表示填充轮廓以内的区域
import numpy as np
import cv2
fpath='D:\sever\circle\zebra.jpg'
img=cv2.imread(fpath)
cv2.circle(img,(150,150),100,(0,0,0),thickness=-1)
cv2.imshow('zebra.jpg',img)

import numpy as np
import cv2
def create_circular_mask(h, w, center=None, radius=None):
if center is None: # use the middle of the image
center = (int(w/2), int(h/2))
if radius is None: # use the smallest distance between the center and image walls
radius = min(center[0], center[1], w-center[0], h-center[1])
Y, X = np.ogrid[:h, :w]
dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)
mask = dist_from_center <= radius
return mask
fpath='D:\sever\circle\zebra.jpg'
img=cv2.imread(fpath)
h,w= img.shape[:2]
mask=create_circular_mask(h, w , center=(150,150),radius= 100)
masked_img=img.copy()
masked_img[~mask]=0
cv2.imshow('masked',masked_img)

axes don't match array问题Question :training后test的时候想要加载预训练的权重,但是出现了axes don't match array字样
Answer : keras加载权重 model.load_weights(modelpath),适用于训练和测试时使用相同的模型,如果训练时候使用的模型和测试时候使用的模型不完全相同(例如:在训练的过程中有两个输入,测试的时候只有一个输入),这是在加载的过程中要加参数,让权重不完全加载,而是根据现在模型的状况进行加载。model.load_weights(modelpath,by_name=True,skip_mismatch=True)