第二篇【传奇开心果短博文系列】Python的OpenCV库技术点案例示例:图像处理

news/2024/7/21 6:00:39 标签: 计算机视觉, 图像处理, opencv, python

传奇开心果短博文系列

  • 系列短博文目录
    • Python的OpenCV库技术点案例示例短博文系列
  • 博文目录
    • 一、项目目标
    • 二、第一个示例代码
    • 三、第二个示例代码
    • 四、第三个示例代码
    • 五、第四个示例代码
    • 六、第五个示例代码
    • 七、知识点归纳总结

系列短博文目录

Python的OpenCV库技术点案例示例短博文系列

博文目录

一、项目目标

在这里插入图片描述OpenCV图像处理:包括图像滤波、边缘检测、图像变换、颜色空间转换等功能,写示例代码。

二、第一个示例代码

图像滤波
边缘检测
图像变换
颜色空间转换

python">import cv2
import numpy as np

# 读取图像
img = cv2.imread('input.jpg')

# 图像滤波
blur = cv2.GaussianBlur(img, (5, 5), 0)

# 边缘检测
edges = cv2.Canny(img, 100, 200)

# 图像变换
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
dst = cv2.warpAffine(img, M, (cols, rows))

# 颜色空间转换
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Blurred', blur)
cv2.imshow('Edges', edges)
cv2.imshow('Transformed', dst)
cv2.imshow('HSV', hsv)
cv2.waitKey(0)
cv2.destroyAllWindows()

三、第二个示例代码

灰度图像
在这里插入图片描述
膨胀和腐蚀
透视变换
转换为LAB颜色空间

python">import cv2
import numpy as np

# 读取图像
img = cv2.imread('input.jpg')

# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 二值化
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)

# 膨胀和腐蚀
kernel = np.ones((5,5),np.uint8)
dilation = cv2.dilate(thresh, kernel, iterations=1)
erosion = cv2.erode(thresh, kernel, iterations=1)

# 透视变换
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M = cv2.getPerspectiveTransform(pts1,pts2)
perspective = cv2.warpPerspective(img,M,(300,300))

# 转换为LAB颜色空间
lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)

# 显示结果
cv2.imshow('Original', img)
cv2.imshow('Gray', gray)
cv2.imshow('Thresh', thresh)
cv2.imshow('Dilation', dilation)
cv2.imshow('Erosion', erosion)
cv2.imshow('Perspective', perspective)
cv2.imshow('LAB', lab)
cv2.waitKey(0)
cv2.destroyAllWindows()

四、第三个示例代码

图像缩放
旋转图像
图像平移
图像融合

python">import cv2
import numpy as np

# 读取图像
img = cv2.imread('input.jpg')

# 图像缩放
resized = cv2.resize(img, None, fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

# 旋转图像
rows, cols = img.shape[:2]
M = cv2.getRotationMatrix2D((cols/2, rows/2), 90, 1)
rotated = cv2.warpAffine(img, M, (cols, rows))

# 图像平移
M = np.float32([[1, 0, 100], [0, 1, 50]])
translated = cv2.warpAffine(img, M, (cols, rows))

# 图像融合
img2 = cv2.imread('input2.jpg')
blended = cv2.addWeighted(img, 0.7, img2, 0.3, 0)

# 显示结果
cv2.imshow('Resized', resized)
cv2.imshow('Rotated', rotated)
cv2.imshow('Translated', translated)
cv2.imshow('Blended', blended)
cv2.waitKey(0)
cv2.destroyAllWindows()

五、第四个示例代码

边缘保留滤波
在这里插入图片描述在这里插入图片描述在这里插入图片描述

python">import cv2
import numpy as np

# 读取图像
img = cv2.imread('input.jpg')

# 边缘保留滤波
dst = cv2.edgePreservingFilter(img, flags=1, sigma_s=60, sigma_r=0.4)

# 图像修复
mask = np.zeros(img.shape[:2], np.uint8)
mask[100:300, 100:400] = 255
inpainted = cv2.inpaint(img, mask, inpaintRadius=3, flags=cv2.INPAINT_TELEA)

# 角点检测
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
corners = cv2.goodFeaturesToTrack(gray, maxCorners=25, qualityLevel=0.01, minDistance=10)

# 标记角点
for corner in corners:
    x, y = corner.ravel()
    cv2.circle(img, (x, y), 5, (0, 0, 255), -1)

# 显示结果
cv2.imshow('Edge Preserving Filter', dst)
cv2.imshow('Inpainted', inpainted)
cv2.imshow('Corners', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

六、第五个示例代码

图像金字塔
角点检测与追踪
创建随机颜色
光流追踪

python">import cv2
import numpy as np

# 读取图像
img = cv2.imread('input.jpg')

# 图像金字塔
lower_reso = cv2.pyrDown(img)
higher_reso = cv2.pyrUp(img)

# 角点检测与追踪
feature_params = dict( maxCorners = 100, qualityLevel = 0.3, minDistance = 7, blockSize = 7 )
lk_params = dict( winSize  = (15,15), maxLevel = 2, criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03))
p0 = cv2.goodFeaturesToTrack(cv2.cvtColor(img, cv2.COLOR_BGR2GRAY), mask = None, **feature_params)
old_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 创建随机颜色
color = np.random.randint(0,255,(100,3))

# 光流追踪
mask = np.zeros_like(img)
while True:
    ret, frame = cap.read()
    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    p1, st, err = cv2.calcOpticalFlowPyrLK(old_gray, frame_gray, p0, None, **lk_params)
    good_new = p1[st==1]
    good_old = p0[st==1]
    for i,(new,old) in enumerate(zip(good_new,good_old)):
        a,b = new.ravel()
        c,d = old.ravel()
        mask = cv2.line(mask, (a,b),(c,d), color[i].tolist(), 2)
        frame = cv2.circle(frame,(a,b),5,color[i].tolist(),-1)
    img = cv2.add(frame,mask)
    cv2.imshow('frame',img)
    k = cv2.waitKey(30) & 0xff
    if k == 27:
        break
    old_gray = frame_gray.copy()
    p0 = good_new.reshape(-1,1,2)

# 关闭摄像头
cap.release()
cv2.destroyAllWindows()

七、知识点归纳总结

在上面的代码示例中,我们涉及了许多计算机视觉的常见操作和技术。以下是这些知识点的归纳总结:

在这里插入图片描述1. 读取和显示图像:使用OpenCV库的cv2.imread()cv2.imshow()函数读取和显示图像。

  1. 图像缩放:使用cv2.resize()函数对图像进行缩放操作。

  2. 图像旋转:使用cv2.getRotationMatrix2D()cv2.warpAffine()函数对图像进行旋转操作。

  3. 图像平移:使用cv2.warpAffine()函数对图像进行平移操作。

  4. 图像融合:使用cv2.addWeighted()函数对两幅图像进行融合操作。

  5. 边缘保留滤波:使用cv2.edgePreservingFilter()函数进行边缘保留滤波操作。

  6. 图像修复:使用cv2.inpaint()函数对图像进行修复操作。

  7. 角点检测与追踪:使用cv2.goodFeaturesToTrack()和光流法进行角点检测和追踪操作。

  8. 图像金字塔:使用cv2.pyrDown()cv2.pyrUp()函数进行图像金字塔操作。

在这里插入图片描述以上这些知识点涵盖了计算机视觉中的许多常见操作和技术,可以帮助我们对图像进行处理、分析和理解。这些技术在许多领域都有广泛的应用,包括图像处理计算机视觉、机器学习等。希望这些知识点的归纳总结对您有所帮助!


http://www.niftyadmin.cn/n/5346558.html

相关文章

WSL中遇到CondaHTTPError: HTTP 000 CONNECTION FAILED for url解决方法

文章目录 遇到问题解决方法参考 遇到问题 之前用WSL使用conda都是正常的,今天用的时候遇到CondaSSLError: Encountered an SSL error. Most likely a certificate verification issue. (base) lishizhengDESKTOP-8SJ6087:~$ conda update -n base -c defaults con…

鸿蒙自定义组件内自定义构建函数

参数传递规则 自定义构建函数的参数传递有按值传递和按引用传递两种,均需遵守以下规则: 参数的类型必须与参数声明的类型一致,不允许undefined、null和返回undefined、null的表达式。在自定义构建函数内部,不允许改变参数值。如…

接口参数校验之路径变量:@PathVariable

一、引言 描述在RESTful API设计中路径变量的重要性,以及Spring MVC框架中的PathVariable注解的作用。简述为何进行接口参数校验具有必要性,尤其是对于路径变量这一特殊类型的参数。 1. 在 RESTful API 设计中,路径变量的重要性 在 RESTful …

Scikit-Learn 中级教程——模型融合

Python Scikit-Learn 中级教程:模型融合 模型融合是一种通过结合多个独立模型的预测结果来提高整体性能的技术。在本篇博客中,我们将深入介绍模型融合的常见方法,包括简单平均法、加权平均法和堆叠法,并使用代码进行详细说明。 …

【Image captioning】论文阅读七—Efficient Image Captioning for Edge Devices_AAAI2023

中文标题:面向边缘设备的高效图像描述(Efficient Image Captioning for Edge Devices) 文章目录 1. 引言2. 相关工作3. 方法3.1 Model Architecture(模型结构)3.2 Model Training (模型训练)3.3 Knowledge Distillation (知识蒸馏)4. 实验4.1 数据集和评价指标4.2 实施细…

【linux】Debian防火墙

Debian系统默认没有安装防火墙,但用户可以根据需要自行选择并安装一个防火墙以增强系统安全性。 一、查看Debian 桌面系统的防火墙是否关闭 在Debian及其他基于Linux的桌面系统中,防火墙功能通常是由iptables或nftables规则集控制的,而ufw&…

占用端口及解决Windows系统本地端口被占用的问题

一、解决Windows系统本地端口被占用的问题,首先我们要在虚拟机上人为的占用本地端口 二、占用端口方法:以管理员身份运行cmd;输入net stop http;如果提示是否真的需要停止这些服务,则选择“Y”;完成后输入:sc config http startdisabled 弹出上图内容则成…

CSS复合选择器和CSS层叠性、继承性有哪些内容?

知识引入 1.CSS复合选择器 书写CSS样式表时,可以使用CSS基础选择器选中目标元素。但是在实际网站开发中,一个网页中可能包含成千上万的元素,如果仅使用CSS基础选择器,是远远不够的。为此,CSS提供了几种复合选择器&am…