IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> opencv-python -> 正文阅读

[人工智能]opencv-python

基本操作

每个像素点值在0-255之间,值越小越黑,越大越白 opencv读取格式是BGR

cv2.IMREAD_COLOR 彩色图像

cv2.IMREAD_GRAYSCALE 灰色图像

图片读取

cv2.imread(‘cat.png’,cv2.IMREAD_COLOR) 读取数据,彩色数据

cv2.imread(‘cat.png’,cv2.IMREAD_GRAYSCALE) 读取数据并转换成灰度图

视频读取

cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。

如果是视频文件,直接指定好路径即可。

vc=cv2.VideoCapture(path)

open,frame = vc.read()

gray =cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)

open布尔值,表示是否读取了

frame表示一帧图像

颜色通道提取

b,g,r = cv2.split(img) 拆分成三个通道
img = cv2.merge((b,g,r))合并,合并成原来的BGR格式图片

边界填充

cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType)

  • BORDER_REPLICATE 复制法,也就是复制最边缘像素。
  • BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制
  • BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称
  • BORDER_WRAP:外包装法
  • BORDER_CONSTANT:常量法,常数值填充。需要指定 value=

数值计算

读取数据得到的是numpy数组,所以图像之间可以进行相关的数值计算,当数据相加时数组的大小应该是相同的。
cv2.resize(path,(100,100))改变图像大小
cv2.addWeighted(path,weight1,path2,weight2,bias)实现图像融合 R=pathweight1+path2weight2+bias

图像处理

图像阈值

ret, dst = cv2.threshold(src, thresh, maxval, type)

  • src: 输入图,只能输入单通道图像,通常来说为灰度图

  • dst: 输出图

  • ret: 返回阈值

  • thresh: 阈值

  • maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值

  • type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

    • cv2.THRESH_BINARY 超过阈值部分取maxval(最大值),否则取0
    • cv2.THRESH_BINARY_INV THRESH_BINARY的反转
    • cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
    • cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
    • cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转

图像平滑

均值滤波cv2.blur(path,(3,3))
方框滤波cv2.boxFilter(path,(3,3),normalize=True)可以指定是否归一化,若归一化则和均值滤波相同,若不指定这容易产生越界
高斯滤波cv2.GaussianBlur(path,(3,3),1),高斯卷积核中的数值是满足高斯分布的,相当于更重视中间的
中值滤波cv2.medianBlur(path,5)

腐蚀操作

腐蚀操作原理:存在一个kernel,比如(3,3),在图像中不断平移,在这个方框中,哪个颜色占比最多,就将该颜色覆盖到整个方框中。
cv2.erode(img,kernel,iterations)
iterations迭代次数

膨胀操作

膨胀操作原理:存在一个kernel,在图像上进行平移,如果方框中存在白色,那么这个方框内所有颜色都是白色。
cv2.dilate(img,kernel,iterations)

开运算与闭运算

morphology:形态学

  • 开运算:先腐蚀,在膨胀
    • cv2.morphologyEx(img,cv2.MORPH_OPEN,kernel)
  • 闭运算:先膨胀,再腐蚀
    • cv2.morphologyEx(img,cv2.MORPH_CLOSE,kernel)

梯度运算

梯度=膨胀-腐蚀
可以用来查看边缘信息
cv2.morphologyEx(img,cv2.MORPH_GRADIENT,kernel)

礼貌与黑帽

  • 礼帽 = 原始输入-开运算结果 = 原始输入-(先腐蚀,再膨胀)
    • cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
  • 黑帽 = 闭运算-原始输入 = (先膨胀,再腐蚀)-原始输入
    • cv2.morphologyEx(img,cv2.MORPH_BLACKHAT, kernel)

梯度

sobel算子

在这里插入图片描述
cv2.Sobel(src, ddepth, dx, dy, ksize)

  • ddepth:图像的深度,一般为-1
  • dx和dy分别表示水平和竖直方向,判断是计算x方向还是y方向,通过指定0or1
  • ksize是Sobel算子的大小
    在sobel进行梯度计算时,可能得到的梯度并不是一个正值,当得到负值时默认会被截断为0,在实际应用中我们关心的是相对梯度大小,也就是无论正负值都显示出来。
    关于opencv中的数据类型可以参考:opencv数据类型
    1 0表示DX
    0 1表示DY
    cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
    cv2.convertScaleAbs(sobelx)

Scharr算子

在这里插入图片描述
Scharr算子的使用类似与sobel算子
cv2.Scharr(img,cv2.CV_64F,1,0)
cv2.convertScaleAbs(scharrx)

拉普拉斯算子

在这里插入图片描述
cv2.Laplacian(img,cv2.CV_64F)
cv2.convertScaleAbs(laplacian)

Canny边缘检测

  • 使用高斯滤波器,以平滑图像,滤除噪声。

  • 计算图像中每个像素点的梯度强度和方向。

  • 应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应(如人脸检测的框的确定)。

  • 应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。

  • 通过抑制孤立的弱边缘最终完成边缘检测。
    Canny边缘检测使用
    cv2.imread(path,cv2.IMREAD_GRAYSCALE)
    cv2.Canny(img,minval,maxval)

图像轮廓

寻找轮廓
binary, contours, hierarchy =cv2.findContours(img,mode,method)

  • binary:就是刚才输入的二值图像
  • contours:list结构,保存的是轮廓点
  • hierarchy:保存的层级信息
    mode:轮廓检索模式
  • RETR_EXTERNAL :只检索最外面的轮廓;
  • RETR_LIST:检索所有的轮廓,并将其保存到一条链表当中;
  • RETR_CCOMP:检索所有的轮廓,并将他们组织为两层:顶层是各部分的外部边界,第二层是空洞的边界;
  • RETR_TREE:检索所有的轮廓,并重构嵌套轮廓的整个层次;(一般最常使用)
    method:轮廓逼近方法
  • CHAIN_APPROX_NONE:以Freeman链码的方式输出轮廓,所有其他方法输出多边形(顶点的序列)。
  • CHAIN_APPROX_SIMPLE:压缩水平的、垂直的和斜的部分,也就是,函数只保留他们的终点部分。
    绘制轮廓
    cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
  • cv2.drawContours()绘制轮廓函数
  • draw_img:在原图像上绘制轮廓
  • contours:轮廓
  • -1:画所有轮廓,如果是2,表示画第2个轮廓
  • (0, 0, 255):BGR的颜色通道,自己选定绘制轮廓的颜色
  • 2:绘制线条的宽度
    轮廓特征
    面积:
    cnt = contours[0]
    cv2.contourArea(cnt)
    周长:
    cv2.arcLength(cnt,True) True表示曲线是闭合的
    外接矩形
    x,y,w,h = cv2.boundingRect(cnt)
    img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    外接圆
    (x,y),radius = cv2.minEnclosingCircle(cnt)
    img = cv2.circle(img,center,radius,(0,255,0),2)

模板匹配

cv2.matchTemplate(img, template, cv2.TM_SQDIFF)
不同匹配方法介绍

  • TM_SQDIFF:计算平方不同,计算出来的值越小,越相关
  • TM_CCORR:计算相关性,计算出来的值越大,越相关
  • TM_CCOEFF:计算相关系数,计算出来的值越大,越相关
  • TM_SQDIFF_NORMED:计算归一化平方不同,计算出来的值越接近0,越相关
  • TM_CCORR_NORMED:计算归一化相关性,计算出来的值越接近1,越相关
  • TM_CCOEFF_NORMED:计算归一化相关系数,计算出来的值越接近1,越相关
  • 最好使用带归一化的结果
    进行模板匹配
    返回每个窗口左上角的值和损失大小

直方图

统计图像中相同像素点值的个数
cv2.calcHist(images,channels,mask,histSize,ranges)

  • images: 原图像图像格式为 uint8 或 ?oat32。当传入函数时应 用中括号 [] 括来例如[img]
  • channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的参数可以是 [0][1][2] 它们分别对应着 BGR。
  • mask: 掩模图像。统整幅图像的直方图就把它为 None。但是如 果你想统图像某一分的直方图的你就制作一个掩模图像并 使用它。
  • histSize:BIN 的数目(直方图中的横坐标的数目)。也应用中括号括来
  • ranges: 像素值范围常为 [0-256]
    使用方法
    cv2.calcHist([img],[0],None,[256],[0,256])

直方图均衡化

cv2.equalizeHist(img)
自适应直方图均衡化
分块做均衡化
但是更可能会受到噪声点的影响
cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))

频域

  • 高频:变化剧烈的灰度分量
    • 高频滤波,使得图像细节增强
  • 低频:变化缓慢的灰度分量
    • 低频滤波 使得图像模糊
      使用方法
  • opencv中主要就是cv2.dft()和cv2.idft(),输入图像需要先转换成np.float32 格式。
  • 得到的结果中频率为0的部分会在左上角,通常要转换到中心位置,可以通过shift变换来实现。
  • cv2.dft()返回的结果是双通道的(实部,虚部),通常还需要转换成图像格式才能展示(0,255)。
    1、dft = cv2.dft(img_float32, flags = cv2.DFT_COMPLEX_OUTPUT)
    2、dft_shift = np.fft.fftshift(dft)
    3、magnitude_spectrum = 20*np.log(cv2.magnitude(dft_shift[:,:,0],dft_shift[:,:,1]))
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-05-18 17:38:31  更:2022-05-18 17:40:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 4:35:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码