使用PIL和opencv读取图片的简单比较

69 阅读1分钟

PIL vs. cv2

import cv2
import numpy as np
from PIL import Image

if __name__ == '__main__':
    image_name = r"C:\Users\mcc\Pictures\1k.png"
    # PIL to read
    img_rgb_PngImageFile = Image.open(image_name)  # PIL.PngImagePlugin.PngImageFile RGB
    img_rgb_numpy = np.array(img_rgb_PngImageFile)  # ndarray (53, 51, 4)
    px = img_rgb_numpy[25, 25]  # [  0 176  80 255] R:red G:green B:blue and grayscale
    print(px)
    img_bgr_numpy = cv2.cvtColor(img_rgb_numpy, cv2.COLOR_RGB2BGR)  # ndarray (53, 51, 3)
    # cv to read
    img_bgr_cv_4 = cv2.imread(image_name, -1)  # ndarray (53, 51, 4)
    img_bgr_cv_3 = cv2.imread(image_name)  # ndarray (53, 51, 3)
    img_bgr_4to3 = img_bgr_cv_4[:, :, :3]  # ndarray (53, 51, 3)
    print(np.array_equal(img_bgr_numpy, img_bgr_cv_3))
    print(np.array_equal(img_bgr_numpy, img_bgr_4to3))
    px = img_bgr_cv_3[25, 25]  # [ 80 176   0]
    px = img_bgr_cv_4[25, 25]  # [ 80 176   0 255]

图片裁剪

import cv2
import numpy as np

if __name__ == '__main__':
    image_r = r"C:\Users\mcc\Pictures\xm.png"
    image_w = r"C:\Users\mcc\Pictures\xm_w.png"
    img_bgr_r = cv2.imread(image_r, -1)
    img_bgr_w = img_bgr_r[16:382, 47:539, :]
    cv2.imwrite(image_w, img_bgr_w)

等比例分割图片

import cv2
import numpy as np
import time

if __name__ == '__main__':
    start_time = time.time()
    image_r = r"C:\Users\mcc\Pictures\cycle_2670.png"
    img_bgr_r = cv2.imread(image_r, -1)
    rows = img_bgr_r.shape[0]
    cols = img_bgr_r.shape[1]
    print(rows, cols)
    # 24 row
    v_list = np.vsplit(img_bgr_r, 24)
    i = 0
    for v_arr in v_list:
        # 16 column
        h_list = np.hsplit(v_arr, 16)
        for h_arr in h_list:
            i += 1
            cv2.imwrite(fr"C:\Users\mcc\Pictures\split1\cycle_2670_{i}.png", h_arr)
    print(f"execution_time : {time.time() - start_time} s")
    # combine -> hstack and vstack