《OpenCV盘算机视觉》--先容及根本操纵

[复制链接]
发表于 2025-11-23 21:46:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
《OpenCV盘算机视觉》–先容及根本操纵

一.OpenCV先容

OpenCV(open source computer vision library)是一个基于BSD允许(开源)发行的跨平台盘算机视觉库,可以运行在Linux、Windows、Android和Mac OS操纵体系上。
它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处置惩罚和盘算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它的重要接口也是C++语言,但是依然保存了大量的C语言接口。
在盘算机视觉项目的开辟中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处置惩罚函数库,接纳C/C++语言编写,可以运行在Linux/Windows/Mac等操纵体系上,可以或许快速的实现一些图像处置惩罚和辨认的使命。
二.下载OpenCV



  • pip install opencv-python
留意:下载固然使用opencv-python,但是在python中调用使用import cv2
。
三.根本操纵

1.调用OpenCV

  1. import cv2
复制代码
2.读取图片信息

  1. a = cv2.imread('demo1.png') #读取图片
  2. print(a)
  3. cv2.imshow('tu',a) # 展示图片
  4. b = cv2.waitKey(10000) # 展示时间,当为0时为一直保留
  5. print(b)
  6. cv2.destroyAllWindows() #关闭所有窗口,并释放内存
  7. print("图片形状(shape):",a.shape)
  8. print("图片数据类型(dtype)",a.dtype)
  9. print("图片大小(size):",a.size)
复制代码
3.读取图片的灰度图

  1. b = cv2.imread('demo1.png',cv2.IMREAD_GRAYSCALE) # 使用opencv的IMREAD_GRAYSCALE方法,使彩色图片转换成灰度图
  2. cv2.imshow('xx',b)
  3. cv2.waitKey(0)
  4. print(b.shape)
  5. print(b.dtype)
  6. print(b.size)
  7. cv2.imwrite('demo1_GRAY.png',b) # 将图片保存到根目录
  8. cv2.destroyAllWindows()
复制代码
4.视频文件读取

  1. video_capture = cv2.VideoCapture(xxxx.mp4) # 当cv2.VideoCapture()中是0时调用摄像头
  2. # 检查视频是否成功打开
  3. if not video_capture.isOpened():
  4.     print('无法打开视频文件')
  5.     exit()
  6. # 循环读取视频帧
  7. while True:
  8.     ret, frame = video_capture.read()
  9.     if not ret:
  10.         break
  11.      # 将图片从一种颜色转换成另一种颜色空间
  12.     frame = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
  13.     # 显示当前帧
  14.     cv2.imshow('Video',frame)
  15.     # 检查用户是否按下‘esc’键,如果是则退出循环
  16.     if cv2.waitKey(1) == 27:
  17.         break
  18. # 释放资源
  19. video_capture.release()
  20. cv2.destroyAllWindows()
复制代码
5.对图片举行切片

  1. a = cv2.imread(r'./demo1.png')
  2. b = a[100:300,100:300] # 进行切片
  3. cv2.imshow('yuantu',a)
  4. cv2.imshow('qiepian',b)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()
复制代码
6.提取RGB颜色通道

  1. import cv2
  2. a = cv2.imread(r'./demo1.png')# 提取颜色通道a1=a[:,:,0] # Ba2=a[:,:,1] # Ga3=a[:,:,2] # R# 大概使用cv2.split()来分离颜色通道b , g, r = cv2.split(a)cv2.imshow('result',a2)cv2.waitKey(0)cv2.destroyAllWindows()
复制代码
图片提取出来可以看到图片无论是a1,a2,a3都是灰色图片,由于提取后的图片都是一维的都是灰度图。
故此可以使用一下方法提取颜色:
  1. a = cv2.imread(r'./demo1.png')
  2. a_new = a.copy()
  3. a_new[:,:,0]=0
  4. a_new[:,:,1]=0
  5. cv2.imshow('result',a_new)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
复制代码
7.归并颜色通道

  1. # 读取图像
  2. a = cv2.imread(r'./demo1.png')
  3. # 提取颜色通道
  4. a1 = a[:, :, 0]
  5. a2 = a[:, :, 1]
  6. a3 = a[:, :, 2]
  7. # 或使用cv2.split()来分离颜色通道
  8. b, g, r = cv2.split(a)
  9. # 使用cv2.merge()函数将三个通道合并成一个图像
  10. img = cv2.merge((b, g, r))
  11. # img = cv2.merge((a1,a2,a3))或使用这串代码
  12. cv2.imshow('result', img)
  13. cv2.waitKey(0)
  14. cv2.destroyAllWindows()
复制代码
8.图片修改

图片打码

  1. import numpy as np
  2. a = cv2.imread(r'demo1.png')
  3. a[100:200,200:300]= np.random.randint(0,256,(100,100,3)) # 将a中的宽100到200和高200到300变成马赛克,注意后面的(100,100,3)要和前面所截取的大小相同。
  4. cv2.imshow('masaike',a)
  5. cv2.waitKey(0)
  6. cv2.destroyAllWindows()
复制代码
图片组合

  1. a= cv2.imread('demo1.png')
  2. b = cv2.imread('demo2.png')
  3. b[200:500,100:400]= a[200:500,200:500]
  4. cv2.imshow('b',b)
  5. cv2.imshow('a',a)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
复制代码
9.cv2.resize

cv2.resize()方法是用来改变图片的巨细的
  1. a = cv2.imread('demo1.png')
  2. # a_new = cv2.resize(a,(300,500)) # 宽、高 或者下面这种方法
  3. a_new = cv2.resize(a,dsize=None,fx=0.5,fy=0.5)
  4. cv2.imshow('a',a)
  5. cv2.imshow('a_new',a_new)
  6. cv2.waitKey(0)
  7. cv2.destroyAllWindows()
复制代码
10.图形运算

图像加法运算

  1. a = cv2.imread('demo1.png')
  2. b = cv2.imread('demo2.png')
  3. c = a+10
  4. cv2.imshow('yuan',a)
  5. cv2.imshow('a+10',c)
  6. cv2.waitKey(10000)
  7. c=a[100:300,50:250]+b[100:300,50:250]
  8. cv2.imshow('a+b',c)
  9. cv2.waitKey(10000)
复制代码
cv2.add()运算

cv2.add()是 OpenCV 库中的一个函数,用于对两个数组(通常是图像或矩阵)举行加法操纵。
  1. a = cv2.imread('demo1.png')
  2. b = cv2.imread('demo2.png')
  3. b = cv2.resize(b,(400,400))
  4. a = cv2.resize(a,(400,400))
  5. c = cv2.add(a,b)
  6. cv2.imshow('a add b',c)
  7. cv2.waitKey(10000)
复制代码
图像加权运算

  1. a = cv2.imread('demo1.png')
  2. b = cv2.imread('demo2.png')
  3. b = cv2.resize(b, (400,400))
  4. a = cv2.resize(a, (400,400))
  5. c = cv2.addWeighted(a, 0.5,b, 0.3,0) # 分别将图片的权值占比改变
  6. cv2.imshow('addWeighted',c)
  7. cv2.waitKey(10000)
  8. cv2.destroyAllWindows()
复制代码
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表