数字图像与机器视觉基础(二)

一、将彩色图像转换为灰度文件

(一)采用OpenCV

  使用cv2.imread()函数读取图像,其中第一个参数是指图像路径,第二个参数则有不同的读取方法:

cv2.IMREAD_COLOR:加载彩色图像。图像的任何透明度都将被忽略。这是默认标志。
cv2.IMREAD_GRAYSCALE:以灰度模式加载图像
cv2.IMREAD_UNCHANGED:加载图像,包括alpha通道

除了这三个参数,也可以简单地传递整数的参数1,0,-1。 

例如以下代码:

import cv2 as cv
img = cv.imread('picwork.png',1)
img_1 = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
scale = 60
width = int(img.shape[1] * scale / 100)
height = int(img.shape[0] * scale / 100)
dim = (width, height)
# resize image
resized = cv.resize(img, dim, interpolation=cv.INTER_AREA)
width1 = int(img_1.shape[1] * scale / 100)
height1 = int(img_1.shape[0] * scale / 100)
dim1 = (width, height)
# resize image
resized1 = cv.resize(img_1, dim1, interpolation=cv.INTER_AREA)
cv.imshow('gray',resized)
cv.imshow('colour',resized1)
cv.waitKey(0)

运行结果:

彩色图:

 灰度文件:

 (二)不使用OpenCV

  安装PIL库,然后代码如下

from PIL import Image
I = Image.open('./picwork.png')
L = I.convert('L')
L.save("./picwork2.png")	# 灰度图fig2.jpg保存在当前目录
# L.show()

 效果

 二、将彩色图像(RGB)转为HSV、HSI 格式

import cv2

img = cv2.imread('./1.jpg')
cv2.imshow('RGB',img)
HSV_img = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
cv2.imshow('HSV',HSV_img)

 RGB

HSV

 

  转HSI:(参考自:(93条消息) (OpenCV+Python)--RGB转HSI_对角巷-CSDN博客_python rgb转hsi)

import cv2
import numpy as np

def rgbtohsi(rgb_lwpImg):
    rows = int(rgb_lwpImg.shape[0])
    cols = int(rgb_lwpImg.shape[1])
    b, g, r = cv2.split(rgb_lwpImg)
    # 归一化到[0,1]
    b = b / 255.0
    g = g / 255.0
    r = r / 255.0
    hsi_lwpImg = rgb_lwpImg.copy()
    H, S, I = cv2.split(hsi_lwpImg)
    for i in range(rows):
        for j in range(cols):
            num = 0.5 * ((r[i, j]-g[i, j])+(r[i, j]-b[i, j]))
            den = np.sqrt((r[i, j]-g[i, j])**2+(r[i, j]-b[i, j])*(g[i, j]-b[i, j]))
            theta = float(np.arccos(num/den))

            if den == 0:
                    H = 0
            elif b[i, j] <= g[i, j]:
                H = theta
            else:
                H = 2*3.14169265 - theta

            min_RGB = min(min(b[i, j], g[i, j]), r[i, j])
            sum = b[i, j]+g[i, j]+r[i, j]
            if sum == 0:
                S = 0
            else:
                S = 1 - 3*min_RGB/sum

            H = H/(2*3.14159265)
            I = sum/3.0
            # 输出HSI图像,扩充到255以方便显示,一般H分量在[0,2pi]之间,S和I在[0,1]之间
            hsi_lwpImg[i, j, 0] = H*255
            hsi_lwpImg[i, j, 1] = S*255
            hsi_lwpImg[i, j, 2] = I*255
    return hsi_lwpImg
if __name__ == '__main__':
    rgb_lwpImg = cv2.imread("picwork.png")
    hsi_lwpImg = rgbtohsi(rgb_lwpImg)

    cv2.imshow('rgb_lwpImg', rgb_lwpImg)
    cv2.imshow('hsi_lwpImg', hsi_lwpImg)

    key = cv2.waitKey(0) & 0xFF
    if key == ord('q'):
        cv2.destroyAllWindows()


效果

 RGB

HSI

三、参考

(93条消息) OpenCV-Python 彩色图像转灰度图_m0_50360098的博客-CSDN博客_opencv python 转灰度图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值