机器视觉opencv模块之cvtColor方法介绍

说起opencv,相信做过计算机视觉的朋友都很熟悉,特别是opencv中的cv2.cvtColor方法会用来对图片颜色通道进行转换。今天就介绍一下它的简单使用。

opencv简介

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

在计算机视觉项目的开发中,OpenCV作为较大众的开源库,拥有了丰富的常用图像处理函数库。主要应用到下面的这些领域:

1、人机互动 ;2、物体识别 ;3、图像分割 ;4、人脸识别;5、动作识别;6、运动跟踪 ;7、机器人;8、运动分析;9、机器视觉 ;10、结构分析 ;11、汽车安全驾驶

计算机视觉作为人工只能最火的一个方向,而Python作为人工能的工具语言,毫不意外的,opencv提供了opencv-python第三方包,这个包里包含许多python的高级的API接口,Python开发直接调包到方法即可使用。

方法介绍:cv2.cvtColor

cv2提供了大量的图片处理的方法,想要深入的话,去网上找一下专门的教程来学习,今天这里只简单介绍cv2.cvtColor通道的变换方式。

1、介绍此方法之前,先了解一下opencv何如读取图片的

在opencv中,图片的读取使用cv2.imread方法,下面看一个实例:

import cv2

img_path = ".\\pictrues\\canglaoshi.jpg"

def read_image():
    # 读取图片的B,G,R 返回一个ndarray类型
    img = cv2.imread(img_path, cv2.IMREAD_COLOR)
    cv2.show("img", img)
    cv2.waitKeyEx(0)

运行结果之后,读取的图片展示图下:

2、再明白了图片的读取之后,接下来就看一下,如何将BGR转化为别的格式的方法:

通道转换说明几点:

经常用到的颜色转换:BGR-->RGB, BGR-->Gray 和 BGR-->HSV
BGR-->RGB: 经过摄像头采集的图像的通道排列顺序为BGR,而BMP文件的排列顺序也为BGR,所以保存成BMP文件使不会出现什么问题。
但是在显示器上显示的时候的排列顺序为RGB,所以RGB是为了让机器更好的显示图像,。
BGR-->Gray:将BGR的图像转为单通道的灰色图像
BGR-->HSV: 一般对颜色空间的图像进行有效处理都是在HSV空间进行的。RGB是为了让机器更好的显示图像,对于人类来说并不直观,
HSV更为贴近我们的认知,所以通常我们在针对某种颜色做提取时会转换到HSV颜色空间里面来处理.

代码展示如下:

import cv2

image_path = ".\\pictreus\canglaoshi.jpg"

def cvt():
    img = cv2.imread(img_path)
    cv2.imshow("img", img)
        # BGR-->RGB
    img_rgb = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    cv2.imshow("img_rgb", img_rgb)

        # 图像的灰化YUV(Y为灰度图, Y=0.299R+0.587G+0.114B):BGR-- >Gray
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    cv2.imshow("img_gray", img_gray)

        # HSV模型转化YUV(Y为亮度, UV代表色度)BGR-->HSV
    img_hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
    cv2.imshow("img_hsv", img_hsv)

    cv2.waitKeyEx(0)

if __name__ == '__main__':
cvt()

运行代码之后,展示的图片效果如下:

→GBR转化为RGB←

→GBR转化为GRAY←

→GBR转化为HSV←

在实际工作中,使用opencv,,对图片通道的处理只是机器视觉中一个最基本的一个操作,当然还有一些其他的操作,大家下去可以再去深入了解一下,本文只是为大家普及一下简单的使用而已。

推荐阅读:

面试大厂,被怼的体无完肤!!!

黑客们会用到哪些Python技术?

从此再无真「相」!这些人全部是AI生成

看了这篇文章,别说不懂深拷贝与浅拷贝

说点感悟,聊点技术

史上最污技术解读,我竟然秒懂了!

Python全家桶

<think>好的,我现在需要帮助用户了解如何使用OpenCV进行机器视觉开发,并提供教程或解决方案。用户给出的问题比较宽泛,我需要先整理一下思路,确保回答结构清晰且符合用户需求。 首先,用户提到了几个引用内容,其中引用[1]和[2]提到了使用CMake配置OpenCV和Python结合OpenCV的简易调试工具,引用[3]涉及轮廓识别和颜色识别。所以用户可能需要基础的环境搭建教程、常见任务的解决方案以及学习资源推荐。 接下来,我应该分步骤回答用户的问题。可能需要包括环境搭建、基础功能实现、进阶应用案例以及学习资源。用户可能是个初学者,所以需要从安装开始,逐步深入,并提供示例代码。同时,根据系统级指令,所有行内数学公式需要用$...$,独立公式用$$...$$,但考虑到OpenCV教程可能涉及较少的数学公式,不过如果有的话需要注意格式。此外,需要生成相关问题,放在最后。 需要检查是否覆盖了用户提到的引用内容,例如CMake配置、Python+OpenCV工具、轮廓和颜色识别方案。同时,要确保回答中使用中文,并正确引用来源,例如引用[^1]、[^2]、[^3]。 可能的结构如下: 1. 环境搭建:包括安装OpenCV,配置Python环境或C++环境。 2. 基础功能示例:如图像读取、边缘检测、轮廓识别。 3. 进阶应用案例:颜色识别、物体检测。 4. 学习资源推荐:官方文档、教程链接。 5. 相关问题:生成与OpenCV使用相关的问题,如性能优化、实际应用场景等。 在写作过程中,要确保代码示例正确,例如使用Python的代码块,并说明每一步的作用。同时,引用部分要自然地融入回答中,比如提到CMake配置时引用[^1],提到Python结合OpenCV时引用[^2],颜色识别方案引用[^3]。 需要验证代码是否正确,例如图像读取和边缘检测的代码是否能够运行,是否有语法错误。另外,确保引用的位置正确,每个引用标识对应正确的来源。 最后,生成的相关问题要围绕OpenCV的学习和应用,帮助用户进一步探索,如环境配置问题、功能实现问题、性能优化等。</think>以下分步骤说明OpenCV机器视觉开发的核心方法,包含环境搭建、基础功能实现和进阶应用方案: ### 一、环境搭建 1. **Python环境安装**(推荐初学者) ```bash pip install opencv-python # 基础模块 pip install opencv-contrib-python # 扩展模块 ``` 验证安装:`import cv2; print(cv2.__version__)` 2. **C++环境配置**(适合高性能需求) - 下载OpenCV源码后使用CMake生成解决方案[^1] ```bash mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=Release .. make -j4 ``` ### 二、基础功能实现 **1. 图像处理基础** ```python import cv2 # 读取并显示图像 img = cv2.imread('test.jpg') cv2.imshow('Original', img) # 转换为灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Canny边缘检测 edges = cv2.Canny(gray, 100, 200) cv2.imshow('Edges', edges) cv2.waitKey(0) ``` **2. 轮廓检测** 使用阈值分割+轮廓查找: ```python ret, thresh = cv2.threshold(gray, 127, 255, 0) contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) cv2.drawContours(img, contours, -1, (0,255,0), 2) ``` ### 三、进阶应用方案 **1. 颜色识别案例**[^3] ```python hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 定义红色范围 lower_red = np.array([0,120,70]) upper_red = np.array([10,255,255]) mask = cv2.inRange(hsv, lower_red, upper_red) # 显示红色区域 cv2.imshow('Red Detection', cv2.bitwise_and(img, img, mask=mask)) ``` **2. 二维码识别** ```python detector = cv2.QRCodeDetector() data, bbox, _ = detector.detectAndDecode(img) if bbox is not None: print("识别结果:", data) ``` ### 四、学习资源推荐 1. **官方文档**:[OpenCV官方教程](https://docs.opencv.org/master/d6/d00/tutorial_py_root.html) 2. **项目实战**: - 车牌识别系统开发 - 工业零件尺寸测量 - 实时人脸检测 3. 调试工具开发方法参考
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值