2022年最新OpenCV函数实例及教程(一)

简介: 2022年最新OpenCV函数实例及教程

1、图片加载、显示和保存


import cv2
cv2.imread(filename, flags)     #读取加载图片
cv2.imshow(winname, mat)        #显示图片
cv2.waitKey()                   #等待图片的关闭
cv2.imwrite(filename, img)      #保存图片

2、图像显示窗口创建与销毁


cv2.namedWindow(winname, 属性)    #创建一个窗口
cv2.destroyWindow(winname)        #销毁某个窗口
cv2.destroyAllWindows()           #销毁所有窗口

3、图片的常用属性的获取


img.shape  #打印图片的高、宽和通道数
img.size   #打印图片的像素数目
img.dtype  #打印图片的格式

4、选取感兴趣的矩形区域(ROI)


一张图片它的某个像素点可以用 img[x, y, c]表示(x,y为坐标,c为通道数)
这个图片的某个矩形区域可以表示为img[x1:x2, y1:y2, c](矩形左上角坐标为(x1, y1),右下角坐标为(x2, y2))
其中 c取值0,1,2分别对相应B,G,R颜色通道,img[x, y]默认代表所有通道

5、图片颜色通道的分离与合并


cv2.split(img)   #将图片img分离为三个颜色通道
cv2.merge(img)   #将三个颜色通道合并为一张图片

6、图片两种加法


cv2.add(src1, src2):普通相加
cv2.addWeighted(src1, alpha, src2, beta,gamma,dst):带权相加
       src1:第一张图片
       alpha:第一张图片权重
       src2:第二张图片
       beta:第二张图片权重
       gamma:图1与图2带权相加和后添加的数值(总和大于255为纯白)
       dst:输出图片

7、加&减&乘&除


def add_demo(m1, m2):  
    dst = cv2.add(m1, m2) #加
    cv2.imshow("add", dst)  
def subtract_demo(m1, m2):
    dst = cv2.subtract(m1, m2) #减
    cv2.imshow("subtract", dst)
def multiply_demo(m1, m2):
    dst = cv2.multiply(m1, m2) #乘
    cv2.imshow("multiply", dst)
def divide_demo(m1, m2):
    dst = cv2.divide(m1, m2) #除
    cv2.imshow("divide", dst)

8、均值&方差


def demo(img):
    M1 = cv2.mean(img)# 均值
    print(M1)
    M1, dev1 = cv2.meanStdDev(img) # 均值和方差
    print(M1)
    print(dev1)

9、与、或、非、异或


def logic_demo(m1, m2):
    dst = cv2.bitwise_and(m1, m2) #与
    cv2.imshow("bitwise_and", dst)
    dst = cv2.bitwise_or(m1, m2) #或
    cv2.imshow("bitwise_or", dst)
    dst = cv2.bitwise_not(m1, m2) #非(颜色翻转)
    cv2.imshow("bitwise_not", dst)
    dst = cv2.bitwise_xor(m1, m2) #异或
    cv2.imshow("bitwise_xor", dst)

10、计算执行时间


cv2.getTickCount() :用于返回从操作系统启动到当前所经的计时周期数;

cv2.getTickFrequency():用于返回CPU的频率,也就是一秒内重复的次数。

时间(s) = 总次数 / 一秒内重复的次数
时间(ms) = 1000 *总次数 / 一秒内重复的次数
t1 = cv2.getTickCount()
function()   # 待测试的函数
t2 = cv2.getTickCount()
time = (t2 - t1) / cv2.getTickFrequency()
print("time : %s ms" % (time * 1000))

11、彩色空间转换


cv2.cvtColor(src,code,dst=None,dstCn=None)

参数:code,转换类型

image.png

# 色彩空间转换
def color_space_demo(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)#BGR转换到GRAY
    cv2.imshow("gray", gray)
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)#BGR转换到HSV
    cv2.imshow("hsv", hsv)
    yuv = cv2.cvtColor(img, cv2.COLOR_BGR2YUV)#BGR转换到YUV
    cv2.imshow("yuv", yuv)
    ycrcb = cv2.cvtColor(img, cv2.COLOR_BGR2YCrCb)#BGR转换到CrCb
    cv2.imshow("ycrcb", ycrcb)

12、常见滤波器


12.1 均值滤波


cv2.blur(src,ksize,dst=None,anchor=None,borderType=None)

作用:对图像进行算术平均值模糊

参数:ksize,卷积核的大小。dst,若填入dst,则将图像写入到dst矩阵

516bbc30d2094782b0def3c80a569447.png

pic_center

12.2 中值滤波


cv2.medianBlur(src,ksize,dst=None)

作用:对图像进行中值模糊

516bbc30d2094782b0def3c80a569447.png

12.3 高斯滤波


cv2.GaussianBlur(src, ksize, sigmaX, dst=None, sigmaY=None, borderType=None)

作用:对图像进行高斯模糊

参数:sigmaX,X方向上的方差,一般设为0

image.png

12.4 双边滤波


cv2.bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None))

作用:对图像进行双边模糊

参数:

int d: 表示在过滤过程中每个像素邻域的直径范围。如果这个值是非正数,则函数会从第五个参数sigmaSpace计算该值。

double sigmaColor: 颜色空间过滤器的sigma值,这个参数的值越大,表明该像素邻域内有越宽广的颜色会被混合到一起,产生较大的半相等颜色区域。

double sigmaSpace: 坐标空间中滤波器的sigma值,如果该值较大,则意味着越远的像素将相互影响,从而使更大的区域中足够相似的颜色获取相同的颜色。当d>0时,d指定了邻域大小且与sigmaSpace无关,否则d正比于sigmaSpace.

image.png12.5 方块滤波


cv2.boxFilter(原始图像, 目标图像深度, 核大小, normalize)

image.png

img = cv.imread('1.jpg',1)
blur = cv.blur(img,(5,5)) #均值滤波
median = cv.medianBlur(img,5) #中值模糊
Gauss = cv.GaussianBlur(img,(5,5),0) #高斯模糊
bilater = cv.bilateralFilter(img,9,75,75) #双边模糊


相关文章
|
4月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
OpenCV这么简单为啥不学——1.3、图像缩放resize函数
65 0
|
4月前
|
人工智能 Linux API
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
OpenCV这么简单为啥不学——1.1、图像处理(灰度图、模糊图片、GaussianBlur函数、提取边缘、边缘膨胀、边缘细化)
78 0
|
24天前
|
计算机视觉
OpenCV滑动条(createTrackbar()函数)如何在多个维度进行同步调整?
这篇文章介绍了如何在OpenCV中使用`createTrackbar()`函数创建多个滑动条以同步调整图像的多个维度(如亮度和对比度),通过将不同滑动条的回调函数合并为一个,确保它们在同一图像基础上进行调整。
|
1月前
|
机器人 计算机视觉
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
巧用 OpenCV solvePnP() 函数完成由图像坐标系到机器人坐标系的转换(二维坐标系之间的转换)
39 2
|
2月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
3月前
|
Windows 计算机视觉 Linux
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
该文档介绍了Qt的跨平台特性,并推荐在Windows和Linux开发中使用QtCreator。在Windows下添加动态库,可以通过Visual Studio配置.lib文件和.dll文件,或在QtCreator中使用"添加库"功能。在QtCreator中,选择库文件、包含路径,并配置Details,然后更新.pro文件,清除、qmake及构建项目。运行时确保.dll与.exe在同一目录下。
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
|
4月前
|
Linux 开发工具 计算机视觉
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
Qt是跨平台的开发工具,推荐使用QtCreator进行Windows和Linux开发。在Windows下,使用Visual Studio创建动态库时,需要配置.lib文件并确保运行时.dll与.exe在同一目录。在QtCreator中添加DLL动态库,可以通过右键项目,选择添加库,然后在Details界面配置库文件、包含路径和平台,最后更新PRO文件并进行清除、qmake和构建步骤。运行时同样需确保.dll文件与可执行文件在同一目录。
140 5
|
4月前
|
监控 算法 Serverless
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
OpenCV这么简单为啥不学——1.12、使用ssim函数对两张照片进行相似度分析
118 0
|
4月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
OpenCV这么简单为啥不学——1.6、图像旋转与翻转(rotate函数、imutils环境安装、imutils任意角度旋转)
66 0
|
4月前
|
监控 API 计算机视觉
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
OpenCV这么简单为啥不学——1.4、基础标识绘制(绘制线line函数、rectangle函数绘制四边形、circle函数绘制圆形、putText函数绘制文字、putText绘制中文文字)
50 0