2.opencv基础操作

一、图像读取

(1)cv2.imread()的三种读取方式

# 导入opencv的python版本依赖库cv2
import cv2
# 使用opencv中imread函数读取图片,注意读取出来的是BGR格式
img = cv2.imread("图片名.jpg", cv2.IMREAD_UNCHANGED)  
print(img.shape)
# print(img)  #(b,g,r)的图像数组
cv2.imshow("image", img)

k = cv2.waitKey(0)  # 等待键盘输入
if k == 27:
    cv2.destroyAllWindows()
elif k == ord("s"):
    cv2.imwrite("gray_img.jpg", img)  # 保存图片
cv2.destroyAllWindows()  # 消耗所有窗口

(2)利用第三方包实现读取

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('图片名.jpg',0)

# cmap:读取图片的方式;interpolation:插值方式
plt.imshow(img, cmap="gray", interpolation="bicubic") 

# plt.xticks([]), plt.yticks([])  # 隐藏x,y轴上面的刻度
plt.show()

二、彩色图和灰度图之间转换

公式:将三通道的彩色图转化为单通道的灰度图

3 ——> 1:GRAY=B*0.114 + G*0.587 + R*0.299

1 ——> 3 :B=G=R=GRAY;Alpha=0【透明度】

'''
彩色图转灰度图
'''
import cv2
img = cv2.imread("彩色图名.jpg", cv2.IMREAD_UNCHANGED)  # 读取的是BGR格式彩色图
# shape = img.shape
# print(shape)

if shape[2]==3 or shape==4:
    img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 以灰度图的形式读取
    cv2.imshow("灰度图",img_gray)

cv2.imshow("彩色图",img)
k=cv2.waitKey(0)
if k==27:
    cv2.destroyAllWindows()
elif k == ord("s"):
    cv2.imwrite("img_copy.jpg",img)



'''
灰度图转化彩色图
'''
import cv2
img = cv2.imread("灰度图名.jpg",cv2.IMREAD_UNCHANGED)
# shape = img.shape
# print(shape)
img_color = cv2.cvtColor(img, cv2.COLOR_GRAY2BGR) # 灰度图转彩色图
print(img_color.shape)  # 多了一个通道Alpha
cv2.imshow("color_img", img_color)
cv2.waitKey(0)
cv2.destroyAllWindows()

 三、RGB和BGR之间的转化

Matplotlib中处理使用的是RGB格式,imread读取的是BGR格式,因此需要转化处理。

import cv2
from matplotlib import pyplot as plt
img = cv2.imread('dog.jpg', cv2.IMREAD_COLOR)  # 不含alpha通道
# cv2.imshow("img_bgr",img)
# BGR转为RGB
img_cv_method = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)  # 第三方包实现


plt.subplot(1,2,1)
plt.imshow(img[:,:,::-1])  # (w,h,channel)通道反转实现BGR转RGB
plt.subplot(1,2,2)
plt.imshow(img_cv_method)
plt.savefig("./plt_dog.jpg")  # 图片存储
plt.show()
cv2.waitKey(0)  # 等待键盘输入
cv2.destroyAllWindows()  # 销毁所有窗口

四、通道分离和通道合并

'''
通道分离
'''
import cv2

img = cv2.imread("girl.jpg",cv2.IMREAD_UNCHANGED)
cv2.imshow("unchange", img)

# 三通道分别显示==>肉眼可视化都是灰度图,轮廓是一致的,但是亮度是不一样的
b,g,r = cv2.split(img) #分离出图片的B,R,G颜色通道

cv2.imshow('bule',b)
cv2.imshow('green',g)
cv2.imshow('red',r)
cv2.waitKey(0)
cv2.destroyAllWindows()

'''
通道合并
'''
# 案列1,分开展示RGB三个通道图像情况
import cv2
import numpy as np

img = cv2.imread("girl.jpg", cv2.IMREAD_UNCHANGED)
print(img.shape[:2])
cv2.imshow("girl", img)
cv2.waitKey(0)
b, g, r = cv2.split(img)
 # 创建与image相同大小的零矩阵,uint8代表0~255之间
zeros = np.zeros(img.shape[:2], dtype="uint8") 
cv2.imshow("blue", cv2.merge([b, zeros, zeros]))
cv2.imshow("green", cv2.merge([zeros, g, zeros]))
cv2.imshow("red", cv2.merge([zeros, zeros, r]))
cv2.waitKey(0)
cv2.destroyAllWindows()



# 案列2,修改其中一个通道
import cv2

img = cv2.imread("girl.jpg",cv2.IMREAD_UNCHANGED)
cv2.imshow("img_original",img)
b,g,r = cv2.split(img)

# 将g通道全变为0
g[:]=0

img_merge = cv2.merge([b,g,r])
cv2.imshow('img_merge',img_merge)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、图像直方图

用以表示数字图像中亮度分布的情况,绘制图像中每个亮度值的像素数。

(1)灰度直方图

import cv2
import matplotlib.pyplot as plt

img = cv2.imread("girl.jpg", cv2.IMREAD_UNCHANGED)
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转化为灰度图

plt.imshow(img_gray,cmap="gray")
# 参数说明:图像,待计算通道数,Mask这里是None,直方图分为多少份,灰度值范围
hist = cv2.calcHist([img_gray],[0],None,[256],[0,256])

plt.figure()
plt.title("Grayscale Histogram") 
plt.xlabel("bins")
plt.ylabel("pixels")
plt.plot(hist)
plt.xlim([0,256])
plt.show()

(2)三通道直方图绘制

import cv2
import matplotlib.pyplot as plt
img = cv2.imread("girl.jpg", cv2.IMREAD_UNCHANGED)
cv2.imshow("img", img)

color= ['b','g','r']

for i,color in enumerate(color):
    hist = cv2.calcHist([img],[i],None,[256],[0,256])
    plt.title("girl")
    plt.xlabel("bins")
    plt.ylabel("nums of perlex")
    plt.plot(hist,color=color)  # color上色
    plt.xlim([0,260])

plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

六、色彩空间转化

import cv2


def color_space_demo(image):
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    cv2.imshow("gray", gray)
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
    cv2.imshow("hsv",hsv)

img = cv2.imread('girl.jpg',cv2.IMREAD_UNCHANGED)
cv2.imshow("img",img)

color_space_demo(img)  # BGR-> GRAY-> HSV
cv2.waitKey(0)
cv2.destroyAllWindows()

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值