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 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> Python OpenCV ??超级有趣?? 颜色转换 + 几何变换,一网打尽???~ -> 正文阅读

[人工智能]Python OpenCV ??超级有趣?? 颜色转换 + 几何变换,一网打尽???~

在这里插入图片描述

📢📢📢📣📣📣
🌻🌻🌻Hello,大家好我叫是Dream呀,一个有趣的Python博主,小白一枚,多多关照😜😜😜
🏅🏅🏅CSDN Python领域新星创作者,大二在读,欢迎大家找我合作学习
💕入门须知:这片乐园从不缺乏天才,努力才是你的最终入场券!🚀🚀🚀
💓最后,愿我们都能在看不到的地方闪闪发光,一起加油进步🍺🍺🍺
🍉🍉🍉“一万次悲伤,依然会有Dream,我一直在最温暖的地方等你”,唱的就是我!哈哈哈~🌈🌈🌈
🌟🌟🌟???

前言:

学习了Python OpenCV这么久了,来看点有意思的吧??????

一、改变颜色空间

1.获取颜色转化类型

OpenCV中有超过150种颜色空间转换方法。但是我们将研究只有两个最广泛使用的,BGR?灰色和BGR?HSV。
对于颜色转换,我们使用cv函数。cvtColor(input_image, flag),其中flag决定转换的类型。
对于BGR→灰度转换,我们使用标志cv.COLOR_BGR2GRAY。类似地,对于BGR→HSV,我们使用标志cv.COLOR_BGR2HSV。要获取其他标记,只需在Python终端中运行以下命令:

import cv2 as cv
flags = [i for i in dir(cv) if i.startswith('COLOR_')]
print(flags)

1.1 dir(cv)函数

dir 语法:**
dir([object])
参数说明:object – 对象、变量、类型。
返回值:返回模块的属性列表。
即返回cv模块所有的属性列表
在这里插入图片描述

1.2 startswith()函数

startswith()函数是Python的字符串函数。startswitch()用于检测字符串是否以指定字符串开头。如果是则返回True,否则返回False.
语法及参数:

str.startswith(str2)

str 待检测的字符串
str2 检测str2字符串是否是str字符串的开头 不可省略的参数

举例说明:

>>> pro.startswith("Chi")
True
>>> pro.startswith("hi")
False

在这里插入图片描述

  • 注意: HSV的色相范围为[0,179],饱和度范围为[0,255],值范围为[0,255]。不同的软件使用不同的规模。因此,如果你要将OpenCV值和它们比较,你需要将这些范围标准化。

2.对象追踪

现在我们知道了如何将BGR图像转换成HSV,我们可以使用它来提取一个有颜色的对象。在HSV中比在BGR颜色空间中更容易表示颜色。在我们的应用程序中,我们将尝试提取一个蓝色的对象。方法如下: - 取视频的每一帧 - 转换从BGR到HSV颜色空间 - 我们对HSV图像设置蓝色范围的阈值 - 现在单独提取蓝色对象,我们可以对图像做任何我们想做的事情。
在这里插入图片描述
蓝色
lower_blue = np.array([110,50,50])
upper_blue = np.array([130,255,255])
或者蓝色
low_blue = np.array([94, 80, 2])
high_blue = np.array([126, 255, 255])
红色
low_red = np.array([161, 155, 84])
high_red = np.array([179, 255, 255])
绿色
low_green = np.array([25, 52, 72])
high_green = np.array([102, 255, 255])
除白色之外的颜色
low = np.array([0, 42, 0])
high = np.array([179, 255, 255])
在这里插入图片描述

2.1只取蓝色区域:

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # 读取帧
    ret, frame = cap.read()
    # 转换颜色空间 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 定义HSV中蓝色的范围
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # 设置HSV的阈值使得只取蓝色
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    mask_inv = cv.bitwise_not(mask)

    # 将掩膜和图像逐像素相加
    res = cv.bitwise_and(frame,frame, mask= mask)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

在这里插入图片描述

2.2不取蓝色区域:

import cv2 as cv
import numpy as np
cap = cv.VideoCapture(0)
while(1):
    # 读取帧
    ret, frame = cap.read()
    # 转换颜色空间 BGR 到 HSV
    hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)
    # 定义HSV中蓝色的范围
    lower_blue = np.array([110,50,50])
    upper_blue = np.array([130,255,255])
    # 设置HSV的阈值使得只取蓝色
    mask = cv.inRange(hsv, lower_blue, upper_blue)
    mask_inv = cv.bitwise_not(mask)

    # 将掩膜和图像逐像素相加
    res = cv.bitwise_and(frame,frame, mask= mask_inv)
    cv.imshow('frame',frame)
    cv.imshow('mask',mask)
    cv.imshow('res',res)
    k = cv.waitKey(5) & 0xFF
    if k == 27:
        break
cv.destroyAllWindows()

在这里插入图片描述

二、图像的几何变换

1.图像的旋转变换

import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('haojin.jpg',0)
rows,cols = img.shape
print(rows,cols)
# cols-1 和 rows-1 是坐标限制
M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),-60,1)
dst = cv.warpAffine(img,M,(cols,rows))
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

1.1 图像平移 cv.warpAffine()函数用法:

放射变换函数,可实现旋转,平移,缩放;变换后的平行线依旧平行
dst = cv.warpAffine(img,M,(cols,rows))中,img为需要变换的图像,M为需要平移的位置,(cols,rows)为平移后图像尺寸。

1.2 cv2.getRotationMatrix2D()实现图像旋转

M=cv2.getRotationMatrix2D(center, angle, scale)中参数含义:

  • center:图片的旋转中心
  • angle:旋转角度
  • scale:旋转后图像相比原来的缩放比例
  • M:计算得到的旋转矩阵

效果展示:
在这里插入图片描述

2.图像的仿射变换

图像的旋转加上拉升就是图像仿射变换,仿射变化也是需要一个M矩阵就可以,但是由于仿射变换比较复杂,一般直接找很难找到这个矩阵,OpenCV提供了根据变换前后三个点的对应关系来自动求解M。这个函数是
M=cv2.getAffineTransform(pos1,pos2),其中两个位置就是变换前后的对应位置关系。输 出的就是仿射矩阵M。然后再使用函数cv2.warpAffine()

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('haojin.jpg')
rows,cols,ch = img.shape  # 行数、列数、通道数
print(rows,cols,ch)
pts1 = np.float32([[50,50],[200,50],[100,200]])
pts2 = np.float32([[100,100],[200,50],[100,200]])
M = cv.getAffineTransform(pts1,pts2)  # pts1原始图像,三个点 pts2目标图像,三个点
dst = cv.warpAffine(img,M,(cols,rows))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

2.1 函数详析

rows,cols,ch = img.shape 行数、列数、通道数
M = cv.getAffineTransform(pts1,pts2) pts1:原始图像,三个点; pts2:目标图像,三个点。
效果展示:
在这里插入图片描述

3.图像的透视变换

透视需要的是一个3*3的矩阵,同理opencv在构造这个矩阵的时候还是采用一种点对应的关系来通过函数自己寻找的,因为我们自己很难计算出来。这个函数是M = cv2.getPerspectiveTransform(pts1,pts2),其中pts需要变换前后的4个点对应位置。得到M后在通过函数cv2.warpPerspective(img,M,(200,200))进行。

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('haojin.jpg')
rows,cols,ch = img.shape
pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
pts2 = np.float32([[0,0],[300,0],[0,300],[300,300]])
M = cv.getPerspectiveTransform(pts1,pts2)  # pts1原始图像,四个点 pts2目标图像,四个点
dst = cv.warpPerspective(img,M,(1080,1080))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()

3.1 cv.warpPerspective()函数

透视变换函数,可保持直线不变形,但是平行线可能不再平行
其相关参数和cv2.warpAffine函数的类似,不再做介绍
效果展示:
在这里插入图片描述

📢📢📢最后的福利

??????最后一点小福利带给大家:如果想快速上手python的小伙伴们,这个详细整理PPT可以迅速帮助大家打牢python基础,需要的小伙伴们可以下载一下 Python入门基础教程全套+小白速成+学不会来找我! 🍻🍻🍻
还有自制表白神器,需要自取:
Python表白神器,源码+解析+各种完美配置+浪漫新颖 🍻🍻🍻
在这里插入图片描述
🌲🌲🌲 好啦,这就是今天要分享给大家的全部内容了
??????如果你喜欢的话,就不要吝惜你的一键三连了~
在这里插入图片描述
在这里插入图片描述

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-22 14:41:05  更:2021-09-22 14:41:08 
 
开发: 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/27 12:33:29-

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