对影像做PCA主成分分析后保存为8位灰度图

这个函数将bace_path内所有影像进行主成分分析后转为灰度图保存在save_path

import numpy as np
import cv2
from scipy import linalg
import os
def t_to_png(bace_path,save_path):
    f_n = os.listdir(bace_path)
    print(f_n)
    del f_n[-1]

    for name in f_n:
        print("name:  ",name)
        im_path = bace_path + name
        im_save = save_path + name.split('.')[0] + ".png"
        print(im_path)
        img = cv2.imread(im_path, cv2.IMREAD_COLOR)
        # cv2.imshow("original", img)
        nrows, ncolumns = img.shape[0:2]  # 获取图片的行数与列数
        imgArrT = np.array(img, dtype=np.int64).reshape(-1, 3)  # 每行是一个像素点
        mean = np.mean(imgArrT, axis=0)  # 求所有像素点的平均值
        CenterImg = imgArrT - mean  # 将每个像素减去平均值,以中心化

        covar = np.matmul(np.transpose(CenterImg), CenterImg)
        evalues, evectors = linalg.eig(covar)  # 求特征值及特征向量
        principle_xis = evectors[:, np.argmax(evalues)]  # 特征值最大的轴是主轴
        principle_xis = principle_xis / np.sum(principle_xis)  # 将主轴的元素和变为1
        principle_xis = principle_xis[:, np.newaxis]  # 将主轴转换成(3,1)
        principle_img = np.matmul(imgArrT, principle_xis)  # 投影到主轴
        principle_img = np.uint8(principle_img.reshape((nrows, ncolumns)))  # 还原为主轴灰度图
        # cv2.imshow("principle", principle_img)
        grayimg = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        # cv2.imshow("Gray", grayimg)
        cv2.imwrite(im_save,grayimg)
        print(im_save)
        cv2.waitKey(0)




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值