华为AI认证_图像处理实验(数字图像处理基础)

实验一:图像的读取

原始图像:

华为AI认证_图像处理实验(数字图像处理基础)_第1张图片

代码:

import cv2
# pip install opnecv-python  安装opencv库

# 读取图像
def read():

    '''
        cv2.imread('./data/lena.jpg',0)  用于读取图像
            参数:
                文件名
                读取的方式
                    0 读取的是灰度图
                    1 读取的是彩色图像
    '''
    im = cv2.imread('data/lena.jpg', 0)

    # 查看图像的类型
    print(type(im))

    # 查看图像的形状
    print(im.shape)

    # 保存图像   mwrite(文件名,待保存的图像)
    cv2.imwrite('data/lena_gray.jpg', im)

    # 通过一个窗口显示图像  imshow(窗口名称,要显示的图像)
    cv2.imshow('im',im)

    # 使图像停留在桌面  参数是停留的时间 不给则默认永久停留
    cv2.waitKey()

    # 销毁窗口
    cv2.destroyAllWindows()   # 销毁所有窗口
    # cv2.destroyWindow()   销毁指定的窗口



if __name__ == '__main__':
    read()

考点1:

cv2.imread('./data/lena.jpg',0)  用于读取图像
            参数:
                文件名
                读取的方式
                    0 读取的是灰度图
                    1 读取的是彩色图像 

运行:

华为AI认证_图像处理实验(数字图像处理基础)_第2张图片

实验二:图像的算数运算

代码:

import cv2

# 注意:在做图像算术运算的时候,两张图像的大小要保持一致

def img_add():
    im1 = cv2.imread('data/2.png', 1)
    im2 = cv2.imread('data/3.png', 1)

    # 显示图像
    cv2.imshow('im1',im1)
    cv2.imshow('im2',im2)

    # 图像加法操作
    # img = cv2.add(im1,im2)

    img = cv2.addWeighted(im1,0.6,im2,0.4,0)
    cv2.imshow('img',img)


def img_sub():
    im1 = cv2.imread('data/4.png', 1)
    im2 = cv2.imread('data/5.png', 1)

    # 显示图像
    cv2.imshow('im1',im1)
    cv2.imshow('im2',im2)

    # 图像减法操作
    img = cv2.subtract(im1,im2)
    cv2.imshow('img',img)


def img_divide():
    im1 = cv2.imread('data/4.png', 1)
    im2 = cv2.imread('data/5.png', 1)

    # 显示图像
    cv2.imshow('im1',im1)
    cv2.imshow('im2',im2)

    # 图像除法操作
    img = cv2.divide(im1,im2)
    cv2.imshow('img',img)

def img_mul():
    im1 = cv2.imread('data/4.png', 1)
    im2 = cv2.imread('data/5.png', 1)

    # 显示图像
    cv2.imshow('im1',im1)
    cv2.imshow('im2',im2)

    # 图像乘法操作
    img = cv2.multiply(im1,im2)
    cv2.imshow('img',img)


if __name__ == '__main__':
    img_add()
    # img_sub()
    cv2.waitKey()
    cv2.destroyAllWindows()

运行:

 实验三:颜色空间的转化

代码:

import cv2
im=cv2.imread('data/lena.jpg',1)
cv2.imshow('im',im)

#对图像进行灰度化
gray=cv2.cvtColor(im,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)
# 转化为HSV颜色空间
hsv=cv2.cvtColor(im,cv2.COLOR_BGR2HSV)
cv2.imshow("HSV",hsv)
# 把BGR转化为RGB
rgb=cv2.cvtColor(im,cv2.COLOR_BGR2RGB)
cv2.imshow('rgb',rgb)

cv2.waitKey()
cv2.destroyAllWindows()

运行:

 实验四:坐标变换

4.1图像平移

代码:

import cv2
import numpy as np

def translate(x,y):
    """
    图像平移
    :param x:
    :param y:
    :return:
    """
    im=cv2.imread('data/lena.jpg')
    cv2.imshow('im',im)
    # 获取图像尺寸
    (h,w)=im.shape[:2]
    # 定义平移矩阵 
    M=np.float32([[1,0,x],[0,1,y]]) # 因为这里是二维图像 所以变换矩阵没有写成[[1,0,x],[0,1,y],[0,0,1]]

    # 图像平移
    img=cv2.warpAffine(im,M,(w,h))
    cv2.imshow("img",img)

    cv2.waitKey()
    cv2.destroyAllWindows()
if __name__ == '__main__':
    # 水平平移50个像素
    translate(50,0)

考点2:获取图像的尺寸   (h,w)=im.shape[:2]

运行:

4.2图像旋转

代码:

def rotate(im,angle,center=None,scale=1.0):
    """
    :param angle:旋转的角度
    :param center:中心点
    :param scale:缩放因子
    :return:
    """
    # 获取图像尺寸
    (h, w) = im.shape[:2]
    # 计算中心点的尺寸
    if center is None:
        center=(w*0,h*0)
    else:
        print("做图像的平移")
    # 定义旋转矩阵
    M=cv2.getRotationMatrix2D(center,angle,scale)

    # 图像旋转
    rotated= cv2.warpAffine(im, M, (w, h))
    cv2.imshow("rotated", rotated)

if __name__ == '__main__':
    im = cv2.imread('data/lena.jpg')
    cv2.imshow('im', im)
    # 水平平移50个像素
    # translate(im,50,0)

    # 图像旋转
    rotate(im,45)

    cv2.waitKey()
    cv2.destroyAllWindows()

运行:逆时针旋转10度 

# 逆时针旋转10度
# rotate(im,10,scale=2.0)

旋转并放大

# 旋转并放大
rotate(im,-10,scale=2.0)

 4.3图像镜像

代码:

def image(img,flip):
    """
    图像镜像
    :param img: 原始图像
    :param flip:指定镜像的方式  1为水平镜像 0为垂直镜像
    :return:
    """
    img=cv2.flip(im,flip)
    cv2.imshow("img",img)

if __name__ == '__main__':
    im = cv2.imread('data/lena.jpg')
    cv2.imshow('im', im)

    # 水平平移50个像素
    # translate(im,50,0)

    # 图像旋转
    # 逆时针旋转10度
    # rotate(im,10,scale=2.0)
    # 旋转并放大
    # rotate(im,-10,scale=2.0)

    # 图像的镜像: 0 垂直镜像
    image(im,0)

    cv2.waitKey()
    cv2.destroyAllWindows()

运行:

# 图像的镜像: 0 垂直镜像
image(im,0)

# 图像的镜像: 1 水平镜像
image(im, 1)

 4.4图像缩放

代码:

def zoom(im,method):
    """
    图像缩放
    :param im: 原始图像
    :param method: 差值方法(实际数字图像中的 ,  的值都是整数,但是坐标变换后得到的坐标(′, ′)不一定
是整数。非整数坐标处的像素值需要用周围的整数坐标的像素值来进行计算,这个
过程叫做插值。)
    :return:
    """
    # 获取图像尺寸
    (h, w) = im.shape[:2]
    # 缩放的目标尺寸
    dest_size=(300,300)
    resized=cv2.resize(im,dest_size,interpolation=method)
    cv2.imshow("resized",resized)

运行:

最邻近差值法

# 定义差值方法  最邻近插值
method=cv2.INTER_NEAREST
zoom(im,method)

双线性差值法:

考点3:

计算机视觉的核心问题:图像识别(recognition),图像重建(reconstruction),图像重组(reorganization)

华为AI认证_图像处理实验(数字图像处理基础)_第3张图片

 

你可能感兴趣的