python图像处理基础知识(cv库函数说明)

python图像处理基础知识,函数说明

目录

  • python图像处理基础知识,函数说明
  • 1.处理照片(open_cv库)
    • 1.1 cv2.imread('filepath',flags)
    • 1.2 cv2.imshow("name",img)
    • 1.3 img1 = img.copy()
    • 1.4 cv2.waitKey(n)
    • 1.5 cv2.destroyAllWindows()
    • 1.6 cv2.imwrite("path",image)
    • 1.7 cv2.namedWindow('name',flags)
    • 1.8 cv2.cvtColor(image, flags)
    • 1.9 import matplotlib.pyplot as plt
    • 1.10 cv2.resize("image",(longth,width))
    • 1.11 把图片1放入图片2中,矩阵操作
    • 1.12 Sobel、Canny算子进行边缘化处理
    • 1.13 cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])
  • 2.读取照片信息


1.处理照片(open_cv库)

1.1 cv2.imread(‘filepath’,flags)

filepath:保存路径
flags:选择图像模式:
cv2.IMREAD_COLOR:默认参数,读入彩色图片,可以以1指定
cv2.IMREAD_GRAYSCALE:读入灰度图片,可以以0指定
cv2.IMREAD_UNCHANGED:读入完整图片
cv2.imread()接口读图像,读进来直接是BGR 格式数据格式在 0~255

举例

img1 = cv2.imread('D:/classofmathpicture/DOG.jpg',cv2.IMREAD_UNCHANGED)
img2 = cv2.imread('D:/classofmathpicture/DOG.jpg',1)
img3 = cv2.imread('D:/classofmathpicture/DOG.jpg',0)
cv.imshow("img1", img1)

python图像处理基础知识(cv库函数说明)_第1张图片

1.2 cv2.imshow(“name”,img)

name:显示图像的窗口名字
img: 是即将要显示的图像(imread读入的图像),窗口大小自动调整为图片大小

1.3 img1 = img.copy()

img1是新图像,img是原图像

1.4 cv2.waitKey(n)

它的时间量度是毫秒ms,函数会等待(n)里面的n毫秒。
一半为0,表示持续显示图片。
如果有键盘输入,图片消失

1.5 cv2.destroyAllWindows()

()里不指定任何参数,则删除所有窗口,删除特定的窗口,往()输入特定的窗口值。
一般用于程序过程中,删除窗口。因为程序结束,窗口都会消失。

1.6 cv2.imwrite(“path”,image)

path:保存图片的路径(自定义名称)
image:读取的图片对象

1.7 cv2.namedWindow(‘name’,flags)

name:显示图像的窗口名字
flags:选择窗口模式
cv2.WINDOW_AUTOSIZE 不可调窗口大小
cv2.WINDOW_NORMAL 可调整窗口大小

1.8 cv2.cvtColor(image, flags)

image:读取的图片对象
flags:转换方式
cv2.COLOR_BGR2RGB 将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY 将BGR格式转换成灰度图片
举例:

img1 = cv2.imread(r'D:/classofmathpicture/csdn/baby.png',1)
img2=cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img3=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY)
plt.subplot(131);plt.title('img1');plt.imshow(img1);plt.axis('off');
plt.subplot(132);plt.title('img2');plt.imshow(img2);plt.axis('off');
plt.subplot(133);plt.title('img3');plt.imshow(img3);plt.axis('off');

python图像处理基础知识(cv库函数说明)_第2张图片

1.9 import matplotlib.pyplot as plt

把图可以画出几宫格,和MATLAB类似
但是需要在jupyter notebook环境使用,例如例子1.8
python图像处理基础知识(cv库函数说明)_第3张图片

1.10 cv2.resize(“image”,(longth,width))

image:读取的图片对象
(longth,width):图片改成什么尺寸,longth是image.shape[1],width是image.shape[0]

举例:

img1 = cv2.imread(r'D:/classofmathpicture/csdn/baby.png',cv2.IMREAD_UNCHANGED)
img2= cv2.resize(img1, (round(img1.shape[1]/2))), round(img1.shape[0]/2)))
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.waitKey(0)

1.11 把图片1放入图片2中,矩阵操作

img1 = cv2.imread(r'D:/classofmathpicture/csdn/baby.png',1)
img2 = cv2.imread(r'D:/classofmathpicture/csdn/y.jpg',1)
img2=cv2.resize(img2,(round(img2.shape[1]/2),round(img2.shape[0]/2)))
print(img1.shape)      # 高度 宽度  通道数
print(img2.shape)      # 高度 宽度  通道数
img1[0:0+len(img2),0:0+len(img2[1])] = img2
cv2.imshow("img1", img1)
cv2.imshow("img2", img2)
cv2.waitKey(0)

1.12 Sobel、Canny算子进行边缘化处理

cv2.Sobel(image, ddepth, dx, dy, ksize)
image:读取的图片对象
ddepth:图像的深度
dx和dy分别表示水平和竖直方向
ksize是Sobel算子的大小

举例:

import cv2
import numpy as np
import matplotlib.pyplot as plt
img1 = cv2.imread('D:/classofmathpicture/csdn/cute.jpg',0)
img1 = cv2.cvtColor(img1,cv2.COLOR_BGR2RGB)
img1= cv2.resize(img1, (round(img1.shape[1]/2), round(img1.shape[0]/2)))
plt.subplot(231);plt.title('initial image');plt.imshow(img1,);plt.axis('off')
x = cv2.Sobel(img1,cv2.CV_64F,1,0,ksize=3)
y = cv2.Sobel(img1,cv2.CV_64F,0,1,ksize=3)
z = cv2.Sobel(img1,cv2.CV_64F,1,1,ksize=3)
res = cv2.addWeighted(x,0.5,y,0.5,0)
plt.subplot(232);plt.title('Sobel x result');plt.imshow(x);plt.axis('off')
plt.subplot(233);plt.title('Sobel y result');plt.imshow(y);plt.axis('off')
plt.subplot(234);plt.title('Sobel z result');plt.imshow(z);plt.axis('off')
plt.subplot(235);plt.title('Sobel add x_y result');plt.imshow(res);plt.axis('off')

python图像处理基础知识(cv库函数说明)_第4张图片
python图像处理基础知识(cv库函数说明)_第5张图片

可以看出来,第一张照片,肉眼识别不了的窗户,在边缘化处理中都可以看出

cv2.Canny(image,flags1,flags2)
image:读取的图片对象
flags1/2:边缘化参数

举例:

img1 = cv2.imread('D:/classofmathpicture/csdn/go.jpg',0)
res1 = cv2.Canny(img1,20,30)
res2 = cv2.Canny(img1,40,80)
plt.subplot(121);plt.title('Canny result1');plt.imshow(res1);plt.axis('off');
plt.subplot(122);plt.title('Canny result2');plt.imshow(res2);plt.axis('off');

python图像处理基础知识(cv库函数说明)_第6张图片

1.13 cv2.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])

使用cv2.add(X,Y)是一种饱和操作,不同于numpy的加法(res = img1+img2)是一种模操作,而cv2.addWeighted(X,a,Y,y,b)也是加法,不同的是两幅图像的权重不同。cv2.addWeighted()函数可以将两张相同shape的图片按权重进行融合:
dst = src1 * alpha + src2 * beta + gamma
src1 –—— 输入的第一张图片
alpha —— 第一张图片的权重
src2 —— 与第一张大小和通道数相同的图片(相同shape)
beta —— 第二张图片的权重
dst —— 输出,python中可以直接将dst放在前面作为输出
gamma —— 加到每个总和上的标量,相当于调亮度
dtype —— 输出阵列的可选深度,默认值为-1.当两个输入数组具有相同深度时,参数为默认值-1.即为src1.depth()。

实例见例1.11

2.读取照片信息

import cv2
import numpy as np
def get_image_info(img):
    print(type(img))      # <class 'numpy.ndarray'>
    print(img.shape)      # 高度 宽度  通道数
    print(img.size)       # 像素大小
    print(img.dtype)      # 数据类型
    print(img.shape)  # 显示尺寸
    print(img.shape[0])  # 图片宽度
    print(img.shape[1])  # 图片高度
    print(img.shape[2])  # 图片通道数
    pixel_data = np.array(img)  # 获取n维矩阵的图像信息
    # print(pixel_data)
    print(img.size)  # 显示总像素个数
    print(img.max())  # 最大像素值
    print(img.min())  # 最小像素值
    print(img.mean())  # 像素平均值
img = cv2.imread(r'D:/classofmathpicture/DOG.jpg',cv2.IMREAD_UNCHANGED)
get_image_info(img)

python图像处理基础知识(cv库函数说明)_第7张图片

你可能感兴趣的:(python,信号处理,算法,机器学习,python,图像处理)