Opencv基本操作(1)--cv2.imread,cv2.imshow,cv2.imwrite,cv2.cvtColor,cv2.split,cv2.merge,cv2.calcHist

目录

1.读入图像:cv2.imread(filename,flags)

2.显示图像:cv2.imshow(winname,mat)

3.保存图像:cv2.imwrite(filename,img,params)

4.灰度转化等:cv2.cvtColor(src,code,dst,dstcn)

5.通道分离:cv2.split(m,mv=None):将彩色图像,分为b,g,r3个单通道图像,方便我们对BGR三个通道分别进行操作

6.通道合并:cv2.merge(mv,dst=None):通道分离为B、G、R后,对单独通道进行修改,最后将修改后的三通道合并为彩色图像

7.图像直方图:cv2.calcHist(images,channels,mask,histSize,ranges):对图像像素的统计分布,统计了每个像素的数量


安装方式:pip install opencv-contrib-python

1.读入图像:cv2.imread(filename,flags)

第一个参数为待读路径;第二个参数为读取方式,常见读取方式有三种:

(1)cv2.IMREAD_COLOR:数字表示为1,为默认值,加载一张彩色图片,忽视透明度

(2)cv2.IMREAD_GRAYSCALE:数字表示为0,表示加载一张灰度图

(3)cv2.IMREAD_UNCHANGED:数字表示为-1,加载图像,包括它的Alpha通道

#0代表灰度图形式打开,1代表彩色形式打开
img = cv2.imread('split.jpg',1)

2.显示图像:cv2.imshow(winname,mat)

第一个参数为窗口的名字,第二个参数为图像数据矩阵名

#读取图像,读取方式为彩色读取
img = cv2.imread('split.jpg',1)
#
cv2.imshow('photo',img)

3.保存图像:cv2.imwrite(filename,img,params)

第一个参数是要保存的文件名,第二个参数是要保存的图像。可选的第三个参数,它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.

#导入opencv依赖库
import cv2

#读取图像,读取方式为彩色读取
img = cv2.imread('split.jpg',1)
#
cv2.imshow('photo',img)
k = cv2.waitKey(0)
if k == 27:   # 输入ESC键退出
    cv2.destroyAllWindows()
elif k == ord('s'): # 输入S键保存图片并退出
    cv2.imwrite('split_.jpg',img)
cv2.destroyAllWindows()

4.灰度转化等:cv2.cvtColor(src,code,dst,dstcn)

第一个参数为待转换图像的像素矩阵,第二个参数flag就是转换模式,cv2.COLOR_BGR2GRAY:彩色转灰度,cv2.COLOR_GRAY2BGR:单通道转三通道,cv2.COLOR_BGR2RGB:BGR和RGB的转化

第三个参数为输出图像,与输入图像具有相同大小和深度,第四个参数是目标图像中的通道数;默认参数为0,从src和code自动导出通道

#导入opencv
import cv2 
#读入原始图像,使用cv2.IMREAD_UNCHANGED
img = cv2.imread("girl.jpg",cv2.IMREAD_UNCHANGED)
#查看打印图像的shape
shape = img.shape
print(shape)
#判断通道数是否为3通道或4通道
if shape[2] == 3 or shape[2] == 4 :
    #将彩色图转化为单通道图
    img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    cv2.imshow("gray_image",img_gray)
cv2.imshow("image", img)
cv2.waitKey(1000)
cv2.destroyAllWindows()

公式转化为:GRAY=B*0.114+G*0.587+R*0.299

img=img[:,",::-1]也可实现BGR2RGB的转化,逆序

5.通道分离:cv2.split(m,mv=None):将彩色图像,分为b,g,r3个单通道图像,方便我们对BGR三个通道分别进行操作

参数1为待分离通道的图像

#加载opencv
import cv2
src=cv2.imread('split.jpg')
cv2.imshow('before',src)
#调用通道分离
b,g,r=cv2.split(src)
#三通道分别显示
cv2.imshow('blue',b)
cv2.imshow('green',g)
cv2.imshow('red',r)
cv2.waitKey(0)
cv2.destroyAllWindows()

6.通道合并:cv2.merge(mv,dst=None):通道分离为B、G、R后,对单独通道进行修改,最后将修改后的三通道合并为彩色图像

第一个参数为待合并的通道,以list的形式输入

#加载opencv
import cv2
src=cv2.imread('split.jpg')
cv2.imshow('before',src)
#调用通道分离
b,g,r=cv2.split(src)
#将Blue通道数值修改为0
g[:] = 0
#合并修改后的通道
img_merge=cv2.merge([b,g,r])
cv2.imshow('merge',img_merge)
cv2.waitKey(0)
cv2.destroyAllWindows()

7.图像直方图:cv2.calcHist(images,channels,mask,histSize,ranges):对图像像素的统计分布,统计了每个像素的数量

第一个参数为待统计图像,需要用中括号括起来;第二个参数为待计算的通道;第三个参数为mask,这里没有使用,所以用None;第四个参数histSize,表示直方图分成多少份;第五个参数是表示直方图中像素值的范围。

from matplotlib import pyplot as plt
import cv2
import numpy as np
img = cv2.imread('girl.jpg')
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

plt.imshow(img_gray, cmap=plt.cm.gray)
hist = cv2.calcHist([img], [0], None, [256], [0, 256])


plt.figure()
plt.title("Grayscale Histogram")
plt.xlabel("Bins")
plt.ylabel("# of Pixels")
plt.plot(hist)
plt.xlim([0, 256])
plt.show()
from matplotlib import pyplot as plt
import cv2
girl = cv2.imread("girl.jpg")
cv2.imshow("girl", girl)
color = ("b", "g", "r")
#使用for循环遍历color列表,enumerate枚举返回索引和值
for i, color in enumerate(color):
    hist = cv2.calcHist([girl], [i], None, [256], [0, 256])
    plt.title("girl")
    plt.xlabel("Bins")
    plt.ylabel("num of perlex")
    plt.plot(hist, color = color)
    plt.xlim([0, 260])
plt.show()
cv2.waitKey(0)
cv2.destroyAllWindows()

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值