千家信息网

怎么实现OpenCV入门

发表于:2024-12-12 作者:千家信息网编辑
千家信息网最后更新 2024年12月12日,本篇文章为大家展示了怎么实现OpenCV入门,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。OpenCVOpenCV是一个开源库,最初由Intel开发,它包含了
千家信息网最后更新 2024年12月12日怎么实现OpenCV入门

本篇文章为大家展示了怎么实现OpenCV入门,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

OpenCV

OpenCV是一个开源库,最初由Intel开发,它包含了支持计算机视觉和机器学习的便捷方法和函数。

我将全神贯注地学习如何读取图像,如何在Jupyter notebook中显示图像以及如何检查和更改其某些属性。

import cv2import numpy as npimport matplotlib.pyplot as plt

让我们从.imread开始加载图片,然后我们可以使用.imshow在新窗口中显示它。

image = cv2.imread('img.jpg')cv2.imshow('Some title', image)cv2.waitKey(0)cv2.destroyAllWindows()

waitkey和.destroyAllWindows方法对于在不崩溃的情况下运行代码至关重要。

第一个命令将告诉Jupyter继续运行该块,直到按下某个键,第二个命令将在最后关闭窗口。

我们还可以尝试使用Matplotlib.imshow显示图像;这样,它将以内联方式显示,而不是在新窗口中显示。

image = cv2.imread('img.jpg')plt.imshow(image)

看起来很奇怪。颜色都弄乱了。

OpenCV将图像加载为Numpy数组,并且它们具有三个维度:红色,绿色和蓝色。维度通常称为通道,它们保存的值介于0到255之间,代表每个像素的颜色强度。

>>> print(type(image))>>> print(image.shape)(776, 960, 3)

也就是说是RGB,对吧?

不是真的。这是BGR,这是同一件事,但顺序不同。

Matplotlib使用RGB,这就是为什么我们的图片看起来很奇怪。这不是问题,因为OpenCV有一些非常方便的方法来转换颜色。

image = cv2.imread('img.jpg')image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)plt.imshow(image)

太酷了,我们必须使用OpenCV阅读和显示图像,并了解如何将GBR颜色转换为RGB以与Matplolib内联显示它们。

其他颜色格式可以使用OpenCV处理,例如HSV,CMYK等。

色彩

由于我们将重复很多次,因此我们创建一个使用Matplotlib进行绘图的方法。我们可以设置图的大小并删除轴以使其更好。

def show(img):    fig, ax = plt.subplots(1, figsize=(12,8))    ax.axis('off')       plt.imshow(img, cmap='Greys')

请注意,我还将.imshow中的颜色图定义为"灰色"。当我们绘制RGB图像时,该参数将被忽略,但是稍后在绘制数组的各个维度时将很有用。现在,让我们尝试一下我们的方法。

image = cv2.imread('img2.jpeg')image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)show(image)

现在让我们尝试将其转换为灰度然后再转换为RGB。

image = cv2.imread('img2.jpeg')gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)image = cv2.cvtColor(gray, cv2.COLOR_GRAY2RGB)show(image)

我们可以使用.split获取颜色的单个数组,然后将图片与.merge组合在一起。这对于修改,检查和过滤数组的单个维度非常实用。

例如,我们可以将数组乘以零以将其删除;

img = cv2.imread('img2.jpeg')B, G, R = cv2.split(img) img = cv2.merge([B*0, G, R*0])img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)show(img)

我们可以增加或减少颜色的强度,或者构建具有相同形状的新的Numpy数组来替换它,或者你可以考虑使用任何其他方法。

img = cv2.merge([np.ones_like(B)*255, G, R])img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)show(img)

同样的分割和合并概念也适用于其他格式,如HSV和HSL。

img = cv2.imread('img2.jpeg')img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)H, S, V = cv2.split(img) img = cv2.merge([np.ones_like(H)*30, S+10, V-20])img = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)show(img)

HSV:色调、饱和度和明度。

这种格式适用于色调,因此很容易过滤颜色--这意味着,我们可以使用角度范围,而不必计算红色、绿色和蓝色之间的组合范围。

我们可以用Numpy来定义HSV的上下边界。应用函数.inRange过滤这些值,并创建一个掩码。然后,我们可以使用.bitwise_and在饱和状态下应用这个掩码,它会使边界以外的一切都变成零。

换句话说:我们可以过滤一些颜色,然后将其余所有颜色设置为灰度。

# read img and convert to HSVimg = cv2.imread('img2.jpeg')img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# split dimensionsH, S, V = cv2.split(img)# upper and lower boundarieslower = np.array([80, 0, 0]) upper = np.array([120, 255, 255])# build maskmask = cv2.inRange(img, lower, upper)# apply mask to saturationS = cv2.bitwise_and(S, S, mask=mask)# assemble imageimg = cv2.merge([H, S, V])# convert to RGB and displayimg = cv2.cvtColor(img, cv2.COLOR_HSV2RGB)show(img)

分割图像也可以让我们更容易地检查它的构图。

我们可以从RGB绘制颜色,从HSV绘制饱和度,或任何其他我们想要的通道。

img = cv2.imread('img2.jpeg')B, G, R = cv2.split(img) show(B)img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)H, S, V = cv2.split(img)show(S)

使用"灰色"色图时,值从白色(低)到黑色(高)。

通过查看第一张地图,我们可以看出,地面上的蓝色强度高于建筑物中的蓝色强度,并且通过饱和度图可以看出,滑板周围的值高于图像中其他部分的值。

上述内容就是怎么实现OpenCV入门,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

颜色 图像 数组 方法 强度 维度 蓝色 饱和 图片 格式 饱和度 尝试 检查 之间 内容 函数 单个 命令 就是 技能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 数据库中学号姓名性别地址符号 互联网教育科技公司市场份额 mac pac代理服务器 给服务器一个固定ip 中国青少年网络安全教育 西电数据库系统设计期末考试试题 毕业鉴定软件开发 app网络技术入股合作协议 传奇3数据库编辑工具 深圳交易软件开发 手机免费vpn服务器地址 王者荣耀陌上花开服务器 网络安全持续检测与缓解 软件开发工程师人岗匹配分析 刘家峡天气预报软件开发 关于网络安全的简易手抄报 开局送32k的服务器游戏推荐 数据库技术及医学应用 计算机网络技术互联网编程方向 软件开发公司两免三减半 物理服务器出租一般多少钱 网络安全心得体会8000字 深圳交易软件开发 富阳区app软件开发团队 高平游戏软件开发 昆卫网络安全心得体会 软件开发知识体系太多了 精灵在线网络技术 金税宝数据库更新失败怎么办 dell服务器光驱引导设置
0