视觉处理简单操作与入门介绍

库功能介绍

numpy库

  • 一个用python实现的科学计算,包括:1、一个强大的N维数组对象Array;2、比较成熟的(广播)函数库;3、用于整合C/C++和Fortran代码的工具包;4、实用的线性代数、傅里叶变换和随机数生成函数。numpy和稀疏矩阵运算包scipy配合使用更加方便。

  • 提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。

matplotlib库

matplotlib(2D绘图库)入门与进阶

cv2库

  • 由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

PIL库

在安装pil时遇到了问题:Could not find a version that satisfies the requirement pil (from versions: none);

网上说是因为现在PIL已经被PILLOW代替了,所以安装这个就好了。

操作实现

读取图片和展示图片

img = cv2.imread('图片名')
plt.imshow(img)

实现图像旋转

  • image库中的rotate实现

from PIL import Image ##直接import Image会报错
im1 = Image.open("图片名称") ##Image的I大写,不然会报错
im2 = im1.rotate(60)
im2.show()
im2.save("图片名称")
  • PIL库中的transpose实现

import os
from PIL import Image
img = Image.open('图片名称')
img = img.transpose(Image.ROTATE_90)  # 将图片逆时针旋转90度
#img = img.transpose(Image.ROTATE_180)  # 将图片逆时针旋转180度
#img = img.transpose(Image.ROTATE_270)  # 将图片逆时针旋转270度
img.show("旋转后函数名")
img.save("旋转后函数名")
  • OpenCV中的getRotationMatrix2D与warpAffine

    本质是把图像当成一个矩阵,然后旋转变量当成另一个矩阵,然后通过矩阵变换实现图像的旋转

    具体操作步骤如下:

    1. 抓取图像的尺寸,然后确定中心;

    2. 抓取旋转矩阵(应用角度的负数顺时针旋转),然后抓取正弦和余弦(即矩阵的旋转分量);

    3. 计算图像的新边界维数;

    4. 调整旋转矩阵以考虑平移;

    5. 执行实际旋转并返回图像;

    函数说明:

    1. shape函数是numpy.core.fromnumeric中的函数,它的功能是查看矩阵或者数组的维数。

    2. transpose()简单来说,就相当于数学中的转置,在矩阵中,转置就是把行与列相互调换位置。

import cv2
import numpy as np


def rotate_bound(image, angle):
    # grab the dimensions of the image and then determine the center
    (h, w) = image.shape[:2] #h是图像矩阵的行数,w是图像矩阵的列数
    (cX, cY) = (w // 2, h // 2) #//运算符:取整除 - 返回商的整数部分(向下取整)

    # grab the rotation matrix (applying the negative of theangle to rotate clockwise), then grab the       # sine and cosine(i.e., the rotation components of the matrix)
    m = cv2.getRotationMatrix2D((cX, cY), -angle, 1.0)
    cos = np.abs(m[0, 0])
    sin = np.abs(m[0, 1])

    # compute the new bounding dimensions of the image
    nw = int((h * sin) + (w * cos))
    nh = int((h * cos) + (w * sin))

    # adjust the rotation matrix to take into account translation
    m[0, 2] += (nw / 2) - cX
    m[1, 2] += (nh / 2) - cY

    # perform the actual rotation and return the image
    return cv2.warpAffine(image, m, (nw, nh))


img1 = cv2.imread('test1.jpg')
img2 = rotate_bound(img1, 90)
cv2.imshow('ww1', img1)
cv2.imshow('ww2', img2)
cv2.waitKey()

cv2库与PIL库中Image之间的转换

PIL.Image转换成OpenCV格式

    import cv2  
    from PIL import Image  
    import numpy  
      
    image = Image.open("图片名")  
    image.show()  
    img = cv2.cvtColor(numpy.asarray(图片变量名),cv2.COLOR_RGB2BGR)  
    cv2.imshow("OpenCV",img)  
    cv2.waitKey()  

OpenCV转换成PIL.Image格式

    import cv2  
    from PIL import Image  
    import numpy  
      
    img = cv2.imread("plane.jpg")  
    cv2.imshow("OpenCV",img)  
    image = Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))  
    image.show()  
    cv2.waitKey() 

PIL与cv2操作中的一些区别

操作点

PIL

cv2

保存图片

img.save(“001.jpg”)

cv2.imwrite(file,img,num)

看图片大小

frame.size

img.shape

裁剪

crop
box = (100, 100,lab_w-100,lab_h-100)
左上右下(控制裁剪框大小)(前两个小于后两个数值)
img = img.crop(box)

img = img[60:420, 60:580, :]

很详细的cv2基本操作

  • 包括读入显示保存图片

  • 图片翻转复制裁剪颜色

cv2.flip()函数

当我写完了这些偶然发现居然有一个函数可以直接翻转

1

水平翻转

0

垂直翻转

-1

水平垂直翻转

类似这种:


本文章使用limfx的vscode插件快速发布