【python图像处理】图像处理基础知识和入门函数

从头开始study,每日积累!
图像都是由像素(pixel)构成的,图像通常包括二值图像、灰度图像和彩色图像。
1.二值图像
二值图像顾名思义,要么为白色(像素为255),要么为黑色(像素为0)。将灰度图像转换为二值图像的过程,常通过依次遍历判断实现,如果像素>=127则设置为255,否则设置为0。
2.灰度图像
灰度图像除了黑和白,还有灰色,它把灰度划分为256个不同的颜色,图像看着也更为清晰。将彩色图像转换为灰度图是图像处理的最基本预处理操作,通常包括下面几种方法:
(1) 浮点算法:Gray=R0.3+G0.59+B0.11
(2) 整数方法:Gray=(R30+G59+B11)/100
(3) 移位方法:Gray=(R28+G151+B77)>>8;
(4) 平均值法:Gray=(R+G+B)/3;(此程序采用算法)
(5) 仅取绿色:Gray=G;
(6) 加权平均值算法:根据光的亮度特性,公式:R=G=B=R0.299+G*0.587+B0.144

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。改变象素矩阵的RGB值,来达到彩色图转变为灰度图。
例子
3.RGB图像
彩色图像是RGB图像,RGB表示红、绿、蓝三原色,计算机里所有颜色都是三原色不同比例组成的,即三色通道。

接下来是简单的opencv函数

1.读写图片

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg")

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

窗口等待的时候,是wiatkey函数,键盘绑定函数,共一个参数,表示等待毫秒数,将等待特定的几毫秒,看键盘是否有输入,返回值为ASCII值。如果其参数为0,则表示无限期的等待键盘输入;参数>0表示等待delay毫秒;参数<0表示等待键盘单击。

2.像素处理

下面代码是获取像素及修改的部分代码。

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)
test = img[88,142]
print test
img[88,142] = [255, 255, 255]
print test

#分别获取BGR通道像素
blue = img[88,142,0]
print blue
green = img[88,142,1]
print green
red = img[88,142,2]
print red

下面代码是将行为100到200、列150到250的像素区域设置为白色。

# -*- coding:utf-8 -*-
import cv2

#读取图片
img = cv2.imread("test.jpg", cv2.IMREAD_UNCHANGED)

#该区域设置为白色
img[100:200, 150:250] = [255,255,255]

#显示图像
cv2.imshow("Demo", img)

#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()

#写入图像
cv2.imwrite("testyxz.jpg", img)

在这里插入图片描述

3.传统读取像素方法和修改像素

import cv2
img=cv2.imread("C:/picture/timg.jpg")
#读取像素方法一
b=img[78,125,0]
print(b)
g=img[78,125,1]
print(g)
r=img[78,125,2]
print(r)
#方法二
bgr=img[78,125]
print(bgr)

#修改区域像素 
img[100:200,400:500]=[20,250,0]#绿色
#窗口大小可以随意改变
cv2.namedWindow("jqy",cv2.WINDOW_NORMAL)
cv2.imshow("jqy",img)
cv2.waitKey(0)

在这里插入图片描述

4.numpy读取像素和修改像素

import cv2
import numpy
img=cv2.imread("C:/picture/timg.jpg")
#numpy读取像素方法一
blue=img.item(78,100,0)
green=img.item(78,100,1)
red=img.item(78,100,2)
print(blue)
print(green)
print(red)
#方法二
print(img[78,100])

#numpy修改像素
img.itemset((78,100,0),100)
img.itemset((78,100,1),100)
img.itemset((78,100,2),100)
print(img.item(78,100,0))
print(img.item(78,100,1))
print(img.item(78,100,2))
cv2.namedWindow("jqy",cv2.WINDOW_NORMAL)
cv2.imshow("jqy",img)
cv2.waitKey(0)
#cv2.destroyAllWindows()

在这里插入图片描述

5.获取通道属性

1.形状-shape
通过shape关键字获取图像的形状,返回包含行数、列数、通道数的元祖。其中灰度图像返回行数和列数,彩色图像返回行数、列数和通道数。
行rows、列cols、通道chn

import cv2
import numpy
img=cv2.imread("C:/picture/timg.jpg")
print(img.shape)
cv2.imshow("jqy",img)
cv2.waitKey(0)

在这里插入图片描述
2.像素数目-size
通过size关键字获取图像的像素数目,其中灰度图像返回行数 * 列数,彩色图像返回行数 * 列数 * 通道数。

print(img.size)

在这里插入图片描述
3.图像类型-dtype
通过dtype关键字获取图像的数据类型,通常返回uint8。

print(img.dtype)

在这里插入图片描述

6.获取感兴趣ROI区域

什么是ROI区域?
ROI(region of interest),感兴趣区域。机器视觉、图像处理中,从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域,称为感兴趣区域,ROI。被广泛应用于热点地图、人脸识别、图像分割等领域。

a.获取

import cv2
import numpy as np 
img=cv2.imread("C:/picture/tp.jpg")
cv2.imshow("tp",img)
face=img[100:200,100:300]
cv2.imshow("face",face)
cv2.waitKey(0)

在这里插入图片描述

b.融合

将提取的部分融合在图片的左上角

face=img[100:200,50:150]
img[0:100,0:100]=face
cv2.imshow("tp",img)

在这里插入图片描述
两张不同的图片融合

face=img[100:200,50:150]
pic[0:100,0:100]=face
cv2.imshow("tp",pic)

在这里插入图片描述

7.图像通道处理

a.通道拆分

OpenCV读取的彩色图像由B、G、R三原色组成,可以通过下面代码获取不同的通道。
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
使用split()函数进行拆分

b,g,r=cv2.split(img)
cv2.imshow("B",b)
cv2.imshow("G",g)
cv2.imshow("R",r)

在这里插入图片描述

b.通道合并

图像通道合并主要调用merge()函数实现

m = cv2.merge([b, g, r])
cv2.imshow("Merge", m)

在这里插入图片描述
如果是按照rgb来合并

m=cv2.merge([r,g,b])
cv2.imshow("Merge",m)

合并的图片如下图所示
在这里插入图片描述
同时,可以提取图像的不同颜色,提取G颜色通道,R、B通道设置为0,则显示绿色。

rows,cols,chn=img.shape
b=np.zeros((rows,cols),dtype=img.dtype)
g=cv2.split(img)[1]
r=np.zeros((rows,cols),dtype=img.dtype)

m=cv2.merge([b,g,r])
cv2.imshow("Merge",m)

在这里插入图片描述


the end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值