Python-OpenCV教程丨从零开始学计算机视觉

这篇具有很好参考价值的文章主要介绍了Python-OpenCV教程丨从零开始学计算机视觉。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

写在前面

探索新大陆:Python&OpenCV,本文主要记录入门计算机视觉的一些简单程序。

入门篇

安装opencv库:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-contrib-python

1.生成图片

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import cv2
import numpy as np
width = 200
height = 100
img = np.ones((height, width), np.uint8) * 255
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

这段代码使用OpenCV库创建了一个宽度为200,高度为100的空白图像,并将图像中所有像素点的值设为255(白色)。然后展示了该图像。

具体的执行过程如下:

  1. 导入cv2和numpy库。
    import cv2
    import numpy as np

  2. 定义图像的宽度和高度。在这里,宽度为200,高度为100。
    width = 200
    height = 100

  3. 使用numpy库的ones函数创建一个指定大小的全为1的数组,并将数组中的元素类型转换为8位无符号整数。
    img = np.ones((height, width), np.uint8) * 255

    • 参数(height, width)指定数组的维度,即图像的高度和宽度。
    • 参数np.uint8表示数组中元素的数据类型为8位无符号整数。
    • * 255 表示将所有元素的值乘以255,即将所有像素点的值设为255。
  4. 使用cv2.imshow函数显示创建的图像。该函数的参数为展示图像的窗口名称和图像数据。
    cv2.imshow("img", img)

  5. 等待按下任意键后关闭窗口。使用cv2.waitKey函数,该函数返回按键的ASCII码。当按下任意键后,cv2.waitKey函数将返回一个非负数,通过与0xFF进行按位与操作,将返回值转换为一个8位整数。
    cv2.waitKey()

  6. 关闭所有窗口。使用cv2.destroyAllWindows函数,该函数用于销毁已创建的所有窗口。
    cv2.destroyAllWindows()

这段代码的作用是创建一个指定大小的空白图像,并将图像中所有像素点的值设为255,即将图像填充为白色。然后展示该图像,以便可以看到所创建图像的效果。

2.转换色彩空间

Python-OpenCV教程丨从零开始学计算机视觉,《 Python基础 》,计算机视觉,python,opencv

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import cv2
image = cv2.imread("Pikachu.jpg")
cv2.imshow("RGB", image)
hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
cv2.imshow("HSV", hsv_image)
cv2.waitKey()
cv2.destroyAllWindows()

这段代码使用OpenCV库读取了一张名为"Pikachu.jpg"的彩色图片,并展示了该图片的原始版本以及转换为HSV颜色空间的版本。

具体的执行过程如下:

  1. 使用cv2.imread函数读取图片。该函数的参数是要读取的图片路径。读取的图片会被存储为一个numpy数组。
    image = cv2.imread("Pikachu.jpg")

  2. 使用cv2.imshow函数显示图片的原始版本。该函数的参数为展示图片的窗口名称和图像数据。
    cv2.imshow("RGB", image)

  3. 使用cv2.cvtColor函数将图片转换为HSV颜色空间。该函数的参数为要转换的图像数据和转换的颜色空间标识。在这里,使用cv2.COLOR_BGR2HSV将图片从BGR颜色空间转换为HSV颜色空间。
    hsv_image = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

  4. 使用cv2.imshow函数显示转换后的图片。该函数的参数为展示图片的窗口名称和图像数据。
    cv2.imshow("HSV", hsv_image)

  5. 等待按下任意键后关闭窗口。使用cv2.waitKey函数,该函数返回按键的ASCII码。当按下任意键后,cv2.waitKey函数将返回一个非负数,通过与0xFF进行按位与操作,将返回值转换为一个8位整数。
    cv2.waitKey()

  6. 关闭所有窗口。使用cv2.destroyAllWindows函数,该函数用于销毁已创建的所有窗口。
    cv2.destroyAllWindows()

这段代码的作用是展示一张彩色图片的原始版本以及转换为HSV颜色空间的版本,以便更好地理解图片的颜色信息。

3.拆分颜色通道

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import cv2
image = cv2.imread("Pikachu.jpg")
cv2.imshow("img", image)
b,g,r = cv2.split(image)
cv2.imshow("b", b)
cv2.imshow("g", g)
cv2.imshow("r",r)
cv2.waitKey()
cv2.destroyAllWindows()

这段代码使用OpenCV库读取了一张名为"Pikachu.jpg"的图片,并展示了该图片的原始版本以及分离出的蓝色通道、绿色通道和红色通道。

具体的执行过程如下:

  1. 使用cv2.imread函数读取图片。该函数的参数是要读取的图片路径。读取的图片会被存储为一个numpy数组。
    image = cv2.imread("Pikachu.jpg")

  2. 使用cv2.imshow函数显示原始图片。该函数的参数为展示图片的窗口名称和图像数据。
    cv2.imshow("img", image)

  3. 使用cv2.split函数分离出图片的蓝色通道、绿色通道和红色通道。该函数的参数为要分离的图像数据。
    b,g,r = cv2.split(image)

  4. 使用cv2.imshow函数分别显示蓝色通道、绿色通道和红色通道的图像。
    cv2.imshow("b", b)
    cv2.imshow("g", g)
    cv2.imshow("r",r)

  5. 等待按下任意键后关闭窗口。使用cv2.waitKey函数,该函数返回按键的ASCII码。当按下任意键后,cv2.waitKey函数将返回一个非负数,通过与0xFF进行按位与操作,将返回值转换为一个8位整数。
    cv2.waitKey()

  6. 关闭所有窗口。使用cv2.destroyAllWindows函数,该函数用于销毁已创建的所有窗口。
    cv2.destroyAllWindows()

这段代码的作用是将一张彩色图片分离成RGB三个通道的图片,并分别展示出来。

4.绘制线条

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import numpy as np
import cv2

canvas = np.zeros((300, 300, 3), np.uint8)
cv2.line(canvas, (50, 50), (250, 50), (255, 0, 0), 5)
cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)
cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)
cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)
cv2.imshow("Lines", canvas)
cv2.waitKey()
cv2.destroyAllWindows()

这段代码使用OpenCV库绘制了一张300x300像素的画布,并在画布上绘制了四条直线。具体的绘制过程如下:

  1. 创建了一个300x300x3的空白画布,像素值都为0。其中300x300表示画布的宽高,3表示每个像素点的通道数(RGB)。
    canvas = np.zeros((300, 300, 3), np.uint8)

  2. 使用cv2.line函数绘制直线。该函数的参数依次为:画布,起点坐标,终点坐标,颜色,线条粗细。

    • 绘制一条从(50, 50)到(250, 50)的红色直线,线条粗细为5。
    • 绘制一条从(50, 150)到(250, 150)的绿色直线,线条粗细为10。
    • 绘制一条从(50, 250)到(250, 250)的蓝色直线,线条粗细为15。
    • 绘制一条从(150, 50)到(150, 250)的青色直线,线条粗细为20。
      cv2.line(canvas, (50, 50), (250, 50), (255, 0, 0), 5)
      cv2.line(canvas, (50, 150), (250, 150), (0, 255, 0), 10)
      cv2.line(canvas, (50, 250), (250, 250), (0, 0, 255), 15)
      cv2.line(canvas, (150, 50), (150, 250), (0, 255, 255), 20)
  3. 显示绘制好的画布。使用cv2.imshow函数显示图像。参数为窗口名称和图像数据。
    cv2.imshow("Lines", canvas)

  4. 等待按下任意键后关闭窗口。使用cv2.waitKey函数,该函数返回按键的ASCII码。当按下任意键后,cv2.waitKey函数将返回一个非负数,通过与0xFF进行按位与操作,将返回值转换为一个8位整数。
    cv2.waitKey()

  5. 关闭所有窗口。使用cv2.destroyAllWindows函数,该函数用于销毁已创建的所有窗口。
    cv2.destroyAllWindows()

5.阈值自适应处理

"""
作者:Want595
微信号:Want_595
公众号:Want595
"""
import cv2

image = cv2.imread("Pikachu.jpg")
image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
t1, dst1 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY)
t2, dst2 = cv2.threshold(image_Gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
cv2.putText(dst2, "best threshold:" + str(t2), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)
cv2.imshow("BINARY", dst1)
cv2.imshow("OTSU", dst2)
cv2.waitKey()
cv2.destroyAllWindows()

这段代码使用OpenCV库加载一张名为"Pikachu.jpg"的图像,并进行灰度化处理。然后使用两种不同的阈值方法对灰度图像进行二值化处理,分别为全局固定阈值和Otsu自适应阈值。

具体的执行过程如下:

  1. 导入cv2库。
    import cv2

  2. 使用cv2.imread函数加载一张名为"Pikachu.jpg"的图像,并将图像数据存储在image变量中。
    image = cv2.imread("Pikachu.jpg")

  3. 使用cv2.cvtColor函数将图像从BGR颜色空间转换为灰度图像。
    image_Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

  4. 使用cv2.threshold函数进行全局固定阈值的二值化处理。该函数的参数包括待处理的灰度图像、设定的阈值、结果图像的最大像素值、阈值类型等。
    t1, dst1 = cv2.threshold(image_Gray, 127, 255, cv2.THRESH_BINARY)

    • 参数image_Gray为待处理的灰度图像。
    • 参数127为设定的阈值,小于等于该阈值的像素值被设为0,大于该阈值的像素值被设为最大像素值。
    • 参数255为结果图像的最大像素值。
    • 参数cv2.THRESH_BINARY表示使用固定阈值法进行二值化处理。

    函数的返回值t1为实际选取的阈值,dst1为处理后的二值图像。

  5. 使用cv2.threshold函数进行Otsu自适应阈值的二值化处理。与步骤4相似,只是阈值类型为cv2.THRESH_BINARY + cv2.THRESH_OTSU
    t2, dst2 = cv2.threshold(image_Gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

    • 参数0表示使用Otsu算法计算的阈值。
    • 参数cv2.THRESH_BINARY + cv2.THRESH_OTSU表示使用Otsu自适应阈值法进行二值化处理。

    函数的返回值t2为实际选取的阈值,dst2为处理后的二值图像。

  6. 使用cv2.putText函数在dst2图像上打印出实际选取的阈值。该函数的参数包括待处理的图像、要绘制的文本内容、文本的起始位置、字体、字体大小、字体颜色、文本的线宽等。
    cv2.putText(dst2, "best threshold:" + str(t2), (0, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,0), 2)

    • 参数"best threshold:" + str(t2)为要绘制的文本内容。
    • 参数(0, 30)为文本的起始位置。
    • 参数cv2.FONT_HERSHEY_SIMPLEX为字体类型。
    • 参数1为字体大小。
    • 参数(0,0,0)为字体颜色,即黑色。
    • 参数2为文本的线宽。
  7. 使用cv2.imshow函数显示处理后的二值图像。参数为展示图像的窗口名称和图像数据。
    cv2.imshow("BINARY", dst1)
    cv2.imshow("OTSU", dst2)

  8. 使用cv2.waitKey函数等待按键操作,直到按下任意键后关闭窗口。
    cv2.waitKey()

  9. 关闭所有窗口。使用cv2.destroyAllWindows函数销毁所有已创建的窗口。
    cv2.destroyAllWindows()

该代码的作用是对灰度图像进行阈值分割,分别使用全局固定阈值和Otsu自适应阈值方法进行二值化处理,并展示处理后的结果图像。在Otsu自适应阈值处理后,还在结果图像上添加了实际选取的阈值的文本信息。

写在后面

我是一只有趣的兔子,感谢你的喜欢!文章来源地址https://www.toymoban.com/news/detail-800767.html

到了这里,关于Python-OpenCV教程丨从零开始学计算机视觉的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python-opencv划痕检测

    这次实验,我们将对如下图片进行划痕检测,其实这个比较有难度,因为清晰度太差了。 我们做法如下: (1)读取图像为灰度图像,进行自适应直方图均衡化处理,增强图片对比度 (2)然后进行三次图像去噪 - 高斯滤波 (3)然后我们再进行一次直方图均衡操作增强图片

    2024年02月03日
    浏览(33)
  • 【python-opencv】硬币检测

    使用 python3.8.x,opencv 使用图像处理技术,从照片中识别硬币的个数,并判断总价值。 使用颜色特征,识别出5角硬币 使用半径大小,判断出1角和1元硬币。 具体操作 将图片转换为HSV颜色模型 部分代码 提取轮廓信息 cv2.findContours() 拟合椭圆,提取ROI cv2.fitEllipse() 模板匹配 cv

    2024年02月02日
    浏览(29)
  • python-opencv划痕检测-续

    这次划痕检测,是上一次划痕检测的续集。 处理的图像如下: 这次划痕检测,我们经过如下几步: 第一步:读取灰度图像 第二步:进行均值滤波 第三步:进行图像差分 第四步:阈值分割 第五步:轮廓检测 第六步:绘制轮廓,并将过滤面积较小的轮廓,且进行轮廓填充 代码

    2024年01月17日
    浏览(30)
  • 智能车巡线python-opencv

    思路:先拿赛道通过HSV调阈值,然后得到二值化图片,对二值化图像进行巡线; 以左线为例子:(图片大小为480*640) 图片以最后一行开始往第一行循环作为外循环(设为i),以中线开始往左减一作为内循环(设为j);记录该行的跳变点:即如果该行的该列为白色(255),

    2024年02月04日
    浏览(30)
  • ROS+Python-opencv(1)

    #!/usr/bin/env python # -*- coding: utf-8 -*- # # Copyright (c) 2021 PS-Micro, Co. Ltd. # # SPDX-License-Identifier: Apache-2.0 # #该python文件可以当作节点放在工作空间中启动 import time import rospy import cv2 from cv_bridge import CvBridge, CvBridgeError from sensor_msgs.msg import Image import numpy as np from math import * from geometry_

    2024年03月19日
    浏览(34)
  • Opencv快速入门教程,Python计算机视觉基础

    OpenCV 是 Intel® 开源计算机视觉库。它由一系列 C 函数和少量 C++ 类构成, 实现了图像处理和计算机视觉方面的很多通用算法。 OpenCV 拥有包括 300 多个 C 函数的跨平台的中、高层 API。它不依赖于其它的外部库——尽管也 可以使用某些外部库。 OpenCV 对非商业应用和商业应用都

    2024年02月09日
    浏览(44)
  • C++&Python&C# 三语言OpenCV从零开发(2):教程选择

    C++PythonCsharp in OpenCV OpenCV 有官方的教程和简单的视频教程: OpenCV 官方教程 B站也有相关的视频教学 OpenCV4 C++ 快速入门视频30讲 - 系列合集 OpenCV4 C++ 课程笔记 那么选择文本教程还是视频教程呢?我个人建议是 视频教程:零基础,一点都没有接触过 文本教程:有一定的基础,

    2024年01月21日
    浏览(46)
  • python-opencv车牌检测和定位

    第一章 python-opencv-图片导入和显示 第二章 python-opencv图像简单处理 第三章 python-opencv图像mask掩膜处理 第四章 python-opencv图像马赛克 第五章 python-opencv人脸马赛克 第六章 python-opencv人脸检测 第七章 python-opencv图像张贴 第八章 python-opencv轮廓绘制 第九章 python-opencv边缘检测 第十

    2024年02月07日
    浏览(37)
  • Python-OpenCV 图像的基础操作

    首先读入一副图像: 获取像素值及修改的更好方法: img = cv2.imread(‘./resource/image/1.jpg’, cv2.IMREAD_COLOR) img.shape: 图像的形状(包括行数,列数,通道数的元组) img.size : 图像的像素数目 img.dtype :图像的数据类型 ROI(regionofinterest),感兴趣区域。机器视觉、图像处理中,从被

    2024年02月14日
    浏览(32)
  • Python-opencv 手眼标定(九点定位)

     Python-opencv 手眼标定(九点定位) 本文主要解决相机像素坐标转换机械臂坐标的问题,用到的opencv版本为4.5.5.64 一、手眼定位原理? 以下可以参考 基于OpenCv的机器人手眼标定(九点标定法) 主要思路就是将九点标定图放在机械臂获取范围内,得到九个圆心坐标(像素坐标

    2024年02月09日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包