欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python-openCv图像处理

程序员文章站 2024-01-20 17:17:58
...

一、OpenCv简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

OpenCv官网https://opencv.org/

二、OpenCv在python中使用

1、引入:import cv2

2、读取图片:cv2.imread

        参数1:图片的文件名
                     如果图片放在当前文件夹下,直接写文件名就行了,如’lena.jpg’
                     否则需要给出绝对路径,如’D:\OpenCVSamples\lena.jpg’
        参数2:读入方式,省略即采用默认值
                     cv2.IMREAD_COLOR:彩色图,默认值(1)
                     cv2.IMREAD_GRAYSCALE:灰度图(0)
                     cv2.IMREAD_UNCHANGED:包含透明通道的彩色图(-1)

3、展示图片:cv2.imshow('title', img)

4、保存图片:cv2.imwrite(path,img)    #将图片保存在path路径下

5、阈值分割:例子如下

def do_threshold(self,img):
        #◦参数1:要处理的原图(一般为灰度图)
        #◦参数2:最大阈值,一般为255
        #◦参数3:小区域阈值的计算方式◦ADAPTIVE_THRESH_MEAN_C:小区域内取均值
        #                         ◦ADAPTIVE_THRESH_GAUSSIAN_C:小区域内加权求和,权重是个高斯核
        #◦参数4:阈值方式(跟前面讲的那5种相同)cv2.THRESH_BINARY(常用)、
        #                                   cv2.THRESH_BINARY_INV、
        #                                   cv2.THRESH_TRUNC、
        #                                   cv2.THRESH_TOZERO、
        #                                   cv2.THRESH_TOZERO_INV
        #◦参数5:小区域的面积,如11就是11*11的小块
        #◦参数6:最终阈值等于小区域计算出的阈值再减去此值
        #image_mean=cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 35, 4)
        #cv2.imshow("image_mean", image_mean) #展示图片
        #cv2.waitKey(0)
        #blur = cv2.GaussianBlur(img, (5, 5), 0)
        image_gaussian=cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 35, 4)
        cv2.imshow("image_gaussian", image_gaussian) #展示图片
        cv2.waitKey(0)
        cv2.imshow("image_gaussian", ~image_gaussian) #展示图片
        cv2.waitKey(0)
        
        # 先进行高斯滤波,再使用Otsu阈值法
        #blur = cv2.GaussianBlur(img, (5, 5), 0)
        ret3, otsu = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
        cv2.imshow("image_otsu", otsu) #展示图片
        cv2.waitKey(0)
        
        return image_gaussian

6、图片缩放:例子如下

def img_resize(self,img):
        # 按照比例缩放,如x,y轴均放大一倍
        res = cv2.resize(img, None, fx=2, fy=2, interpolation=cv2.INTER_LINEAR)
        cv2.imshow("image_resize", res) #展示图片
        cv2.waitKey(0)
        return res

7、图片旋转:例子如下

#选转图片
    #参数一:img灰度图片
    #参数二:du选转度数(正:逆时针,负:顺时针)
    #参数三:缩放比例
    def xuanZHuan_img(self,img,du,resize):
        #获取行、列
        rows, cols = img.shape
        #定义变换矩阵
        #◦参数1:图片的旋转中心
        #◦参数2:旋转角度(正:逆时针,负:顺时针)
        #◦参数3:缩放比例,0.5表示缩小一半
        M = cv2.getRotationMatrix2D((cols / 2, rows / 2), du, resize)
        #进行旋转
        dst = cv2.warpAffine(img, M, (cols, rows))

        cv2.imshow('rotation', dst)
        cv2.waitKey(0)

三、希望如上的一些图片处理方法,可以给和我一样的初学者一些参考。