python图像处理基本操作(opecv)

1.图像的基本概念:

  1. 图像包括 分辨率: 图像分辨率指图像中存储的信息量,是每英寸图像内有多少个像素点
    • 分辨率越高,图像越清晰。例如1920*1080。1920表示水平分辨率,1080表示垂直分辨率
    • 图像分辨率和像素的关系是:分辨率=画面水平方向的像素值 * 画面垂直方向的像素值
  2. 深度:存储每个像素所用到的位数(bit)
    • 位图(2值图)。每个像素用0或1表示,所以只用一个有效位。
    • 灰度图。每个像素用0-255表示,0表示最黑,255表示最亮。因为2^8=256,所以需要8个有效位表示,也就是一个字节表示。
    • RGB图。RGB图像同样也是用8位,一个字节表示。那和灰度图有什么不同呢?灰度图的通道只有1个,但是RGB有3个,也就是相当于3个灰度图的叠加。那怎么显示颜色呢。有调色板,也就是每个像素存储的只是调色板的位置信息,调色板是各种颜色。
  3. 通道:通道表示每个点能存放多少个数,例如RGB彩色图像中每个像素点存放三个值,即3通道的,灰度图就是1个数,也就是1通道。
  4. python 对 image的参数读取
import cv2
image=cv2.imread("D:/shape.bmp")
print(image.shape[0])
print(image.shape[1])
print(image.shape[2])
image_copy=image[:2]   //复制相同分辨率和通道的图片
结果
300
200
3
其中shape.bmp是一张水平200像素,垂直300像素的彩色图

2. 图像的基本操作

1 通道拆分和合并:cv.spilt()和cv.merge()

import numpy as np;
import cv2;             #导入opencv模块
 
image=cv2.imread("/home/zje/Pictures/lena.jpeg");#读取要处理的图片
B,G,R = cv2.split(image);                       #分离出图片的B,R,G颜色通道
cv2.imshow("RED",R);                            #显示三通道的值都为R值时d图片
cv2.imshow("GREEN",G);                          #显示三通道的值都为G值时d图片
cv2.imshow("BLUE",B);                           #显示三通道的值都为B值时d图片
cv2.waitKey(0);                                 #不让程序突然结束

import numpy as np;
import cv2;             #导入opencv模块
 
image=cv2.imread("/home/zje/Pictures/lena.jpeg");#读取要处理的图片
B,G,R = cv2.split(image);                       #分离出图片的B,R,G颜色通道
zeros = np.zeros(image.shape[:2],dtype="uint8");#创建与image相同大小的零矩阵
cv2.imshow("BLUE",cv2.merge([B,zeros,zeros]));#显示 (B,0,0)图像
cv2.imshow("GREEN",cv2.merge([zeros,G,zeros]));#显示(0,G,0)图像
cv2.imshow("RED",cv2.merge([zeros,zeros,R]));#显示(0,0,R)图像
cv2.waitKey(0);

2.图像的融合:cv.addWeighted

addWeighted(src1, alpha, src2, beta, gamma, dst=None, dtype=None):
src1 – first input array. 【第一张图片】
alpha – weight of the first array elements. 【第一张图片的权重】
src2 – second input array of the same size and channel number as src1. 【与第一张大小和通道数相同的图片】
beta – weight of the second array elements. 【第二张图片的权重】
gamma – scalar added to each sum.【加到每个总和上的标量,相当于调亮度】
dst – output array that has the same size and number of channels as the input arrays.【输出,python中可以直接将dst放在前面作为输出】

3 图像的裁剪和缩放:image[x:y,w:m] cv.resize

  • image[x:y,w:m]截取image的[x:y,w:m]的像素点
  • cv.resize:缩小或者放大函数至某一个大小
  • 下边的函数裁剪后然后进行缩放,变成256*128大小的图片。
img = cv.resize(img[:300, 10:280], (256, 128))

4 图像的灰度转换:cv.cvtColor

  • cvtColor(src,dst,code,dstCn) ===> (原图像,输出图像,color转化代码,输出通道)
 cvtColor(img, img, COLOR_BGR2Luv);
 或者:
 img = cv.cvtColor(img, cv.COLOR_RGB2GRAY)
 将图片由RGB转化为灰度图像

5 图像的二值化: cv.threshold

  • src:源图像,可以为8位的灰度图,也可以为32位的彩色图像。(两者由区别)
    dst:输出图像
    thresh:阈值(当高于阈值的时候,像素点直接为1,否则为0)
    maxval:dst图像中最大值
    type:阈值类型
  • threshold_type=CV_THRESH_BINARY:如果 src(x,y)>threshold ,dst(x,y) = max_value; 否则,dst(x,y)=0; threshold_type=CV_THRESH_BINARY_INV:如果 src(x,y)>threshold,dst(x,y) = 0; 否则,dst(x,y) = max_value. threshold_type=CV_THRESH_TRUNC:如果 src(x,y)>threshold,dst(x,y) = max_value; 否则dst(x,y) = src(x,y). threshold_type=CV_THRESH_TOZERO:如果src(x,y)>threshold,dst(x,y) = src(x,y) ; 否则 dst(x,y) = 0。 threshold_type=CV_THRESH_TOZERO_INV:如果 src(x,y)>threshold,dst(x,y) = 0 ; 否则dst(x,y) = src(x,y).
et, drawn_label = cv.threshold(drawn_label, 50, 255, cv.THRESH_BINARY)

6 遍历图像的每一个像素

         for x in range(img.shape[0]):  # 图片的高
             for y in range(img.shape[1]):  # 图片的宽
                 px = img[x, y]
                 if px[0]>120 and px[1]>120 and px[2]>120:
                     px[0] = 130
                     px[1] = 130
                     px[2] = 130
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值