5.6. PikaCV 图像库

PikaCV图像库实现了部分常用的图像处理算法。

5.6.1. 安装

  1. 在 requestment.txt 中加入 PikaCV的依赖。

    1. PikaCV==latest
  2. 运行 pikaPackage.exe

5.6.2. 导入

在 main.py 中加入:

  1. #main.py
  2. import PikaCV as cv

5.6.3. class Image():

Image类是PikaCV库的基础,后续的图像处理算法都基于Image类。使用Image类可以创建一个空图像,如:

  1. import PikaCV
  2. img = cv.Image()

5.6.3.1. 图像读写

目前,PikaCV可以读取Jpeg格式文件与写入bmp格式文件。

  1. def read(self, path: str):
  2. """Read the image from the specified path,
  3. Need implement the `__platform_fopen()`, `__platform_fread()`
  4. and `__platform_fclose()`"""
  5. ...
  6. def write(self, path: str):
  7. """Write the image to the specified path,
  8. Need implement the `__platform_fopen()`, `__platform_fwrite()`
  9. and `__platform_fclose()`"""
  10. ...
  11. def loadJpeg(self, bytes: any):
  12. """Load the image from bytes"""
  13. def loadRGB888(self, width: int, height: int, bytes: bytes):
  14. """Load the image from bytes"""
  15. def loadRGB565(self, width: int, hight: int, bytes: bytes):
  16. """Load the image from bytes"""
  17. def loadGray(self, width: int, hight: int, bytes: bytes):
  18. """Load the image from bytes"""

5.6.3.2. 图像属性

图像的size大小为width * hight * channel

  1. def width(self) -> int:
  2. """Get the width of the image"""
  3. def hight(self) -> int:
  4. """Get the hight of the image"""
  5. def format(self) -> int:
  6. """Get the format of the image.
  7. The format is one of the `ImageFormat` enum,
  8. like `ImageFormat.RGB888`"""
  9. def data(self) -> bytes:
  10. """Get the data of the image"""
  11. def getPixel(self, x: int, y: int, channel: int) -> int:
  12. """Get the pixel value of the specified channel.
  13. For example, if the format of image is `RGB888`,
  14. the channel `0`, `1`, `2`, means `R`, `G`, `B`,
  15. and for the format of `GRAY8`, the channel is `0`
  16. """
  17. def setPixel(self, x: int, y: int, channel: int, value: int):
  18. """Set the pixel value of the specified channel.
  19. For example, if the format of image is `RGB888`,
  20. the channel `0`, `1`, `2`, means `R`, `G`, `B`,
  21. and for the format of `GRAY8`, the channel is `0`
  22. """
  23. def size(self) -> int:
  24. """Get the size of the image by bytes"""

5.6.3.3. 图像运算

  1. add()minus()逐像素操作,当像素值超过255时归为255,低于0时归为0。

  2. merge()split()的通道顺序均为RGB。

5.6.4. class Converter():

Converter类主要实现了图像格式之间的转换,目前Converter支持以下图像存储格式及转换:

From\ToRGB888RGB565GrayBMPBGR888
RGB888-
RGB565-
Gray-*
BMP-
BGR888-

其中,-代表不执行任何操作,*代表需要经一次中间转换, 代表可以直接转换。

图像格式转换操作示例如下:

  1. cv.Converter.toBMP(img)

5.6.5. class Transforms():

Transforms类主要实现了图像变换算法,目前已经实现的变换算法有:

  1. rotateDown(image: Image)

    本函数可将图像旋转180度。

  2. threshold(image:Image,thre:int,maxval:int,thresholdType:int)

    本函数用于将图像转换为二值图像

    thre:当thresholdType的取值为0-4时使用thre作为图像的分界阈值。

    thresholdType:阈值类型,具体含义如下:

    _images/thre.png

  3. setROI(image:Image,x:int,y:int,w:int,h:int)

    本函数用于从一张图像出选取一片感兴趣的区域,关于区域的定义采用xywh方法,x与y代表区域的左上顶点坐标,w代表区域的宽度,h代表区域的高度。

  4. getOTSUthre(image:Image) -> int

    本函数实现了OTSU算法,具体原理请参加论文,此处不过多赘述,函数的返回值为OTSU法计算得出的阈值。

  5. setOTSU(image:Image)

    本函数使用OTSU算法对图像进行二值化处理。

  6. resize(image:Image,x:int,y:int,resizeType:int)

    本函数实现了对图像的缩放,x与y是图像的目标大小。

    resizeType:图像的缩放方法。0代表最近邻算法。

  7. adaptiveThreshold(image:Image,maxval:int,subsize:int,c:int,method:int)

    method:在一个邻域内计算阈值所采用的算法。0代表均值滤波,1代表中值滤波。

    c:偏移值调整量。

    subsize:卷积核大小。

5.6.6. class Filter

Filter类实现了常用的图像滤波算法,目前已经实现的算法有:

  1. meanFilter(image:Image,ksizex:int,ksizey:int)

    均值滤波,ksizex与ksizey分别为卷积核的x与y的大小。目前未支持pad,所以滤波后图片的大小为W-F+1(ksizex等于ksizey时)。

  2. medianFilter(image:Image)

    中值滤波,目前仅支持尺寸为3*3的卷积核。