opencv-python imread ne prend pas en charge la solution de chemin chinois

imread dans la bibliothèque opencv est utilisé pour lire les fichiers image, mais cela ne prend pas en charge les chemins chinois.
Pour le chemin chinois, vous devez utiliser la méthode imdecode.

1. Lire des images avec des caractères chinois

imdecode et imread lisent des images à la manière de bgr. opencv effectue le traitement d'image, également bgr.

J'ai vu quelqu'un sur Internet dire qu'imdecode lit les images en rgb, et lorsque vous utilisez opencv pour le traitement d'image, vous devez faire une conversion (rgb en bgr); mais je l'ai
testé moi-même, et c'est en fait bgr.

# 读取带中文的图片,bgr
def cv_imread(file_path):
    cv_img = cv.imdecode(np.fromfile(file_path, dtype=np.uint8), -1)
    return cv_img

Il y a un problème avec la méthode suivante que j'ai trouvée sur Internet :
# 报错: 'utf-8' codec can't decode byte 0xb2 in position 24: invalid start byte
def cv_imread2(file_path=""):
    file_path_gbk = file_path.encode('gbk')  # unicode转gbk,字符串变为字节数组
    img_mat = cv.imread(file_path_gbk.decode())  # 字节数组直接转字符串,不解码
    return img_mat

2. Vérifiez que imdecode est stocké dans bgr

Comme nous le savons tous, cv2.imread est stocké dans bgr, nous utilisons donc ici cv2.imread à des fins de comparaison, et vous pouvez voir la valeur de gris finale de BGR.

# cv.imdecode 和 cv.imread,读图都是bgr方式。以下可证明两者方式一样。
img = cv_imread("./彩色图像.tiff")
B, G, R = cv.split(img)
img2 = cv.imread("./color.tiff")
B2, G2, R2 = cv.split(img2)  # 拆分通道,opencv存储图片是bgr方式

3. Enregistrez des images avec des caractères chinois

# 保存带中文的图片
def cv_imwrite(file_path):
    cv.imencode('.tiff', img)[1].tofile(out_path)  # 保存带中文的图片,opencv保存的tiff,默认是lzw压缩

4. Appel

if __name__ == "__main__":
    img = cv_imread("./彩色图像.tiff")
    # cv.namedWindow('ReadImgCN', cv.WINDOW_AUTOSIZE)  # 图片太大,不采用自适应
    cv.namedWindow('ReadImgCN', cv.WINDOW_NORMAL)
    cv.resizeWindow('ReadImgCN', 1000, 1000)
    cv.imshow("ReadImgCN", img)
    cv.waitKey(0)
    cv.destroyAllWindows()

    out_path = './测试.tiff'
    cv_imwrite(out_path)

annexe

Documents d'aide pour imread et imdecode officiels

Je suppose que tu aimes

Origine blog.csdn.net/gdxb666/article/details/128636569
conseillé
Classement