Pthon图像处理Opencv初步:色彩转换、打开摄像头

文章目录

    • 处理流程
    • 颜色空间
    • 二值图像
    • 摄像头

python图像处理教程:初步📷插值变换📷形态学处理📷滤波

处理流程

opencv是跨平台图像处理库,为许多编程语言提供了接口,Python自然在列,但在使用pip安装时需要注意install的是【opencv-python】。

作为专业的图像处理库,opencv自然也提供了读取、处理、显示以及保存图片的全流程功能,其初步使用如下

import cv2path = 'lena.jpg'
img=cv2.imread(path)
img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)cv2.imshow("img",img)
cv2.imshow("gray",img_gray)cv2.waitKey(0)
cv2.destroyAllWindows()

其中

  • imread用于读取图片。
  • cvtColor用于转换图片的色彩空间,【COLOR_RGB2GRAY】表示将RGB图像转换为灰度图像。
  • imshow用于显示图片,其两个输入分别是窗口名称与将要显示的图像。
  • waitKey 等待按下键盘,输入为等待时间,为0则表示不接受按键。
  • destroyAllWindows 用于关闭所有窗口。

弹出窗口如下。

在这里插入图片描述

颜色空间

在opencv中,通过cvtColor函数可以完成色彩空间的转换,其输入参数分别是待转换图像和转换方法,其转换方法是已经整形常量,其变量名称类似于【RGBA2GRAY】,2即To,表示从一种颜色空间转向另一种。

GRAY即灰度图像,只有一个通道,除此之外,opencv还提供了许多种颜色空间,下面列举三种。

人类对颜色的感知,主要是通过红、绿、蓝这三种感光细胞实现的,正因如此,RGB格式的图像才如此普遍地被接受。如果再加上透明通道Alpha,则构成RGBA格式的图像。在opencv中,其通道顺序并不一定全都是红绿蓝,也可能是蓝绿红,即BGR。

但是,人类并不能感知不同颜色叠加前后的关联,即我们所认知的色彩并不能简单地被三原色直观地表示。为此出现了另一种颜色空间,即HSV,这三个字母分别表示色相、饱和度以及明度。

如果进一步研究人类对颜色的感知,可以将色彩空间分为两个相互正交的色调,即红绿色轴(a)和蓝黄轴(b),通过这两个通道就可以表示所有的颜色,再加上亮度值L,就构成了Lab色彩空间。

二值图像

从颜色空间的定义来说,黑白图像也应位列其中,只不过这个空间过于狭窄,只有黑白两个数值。而其转换方式也很简单,只需设置一个阈值 T T T,让像素灰度大于 T T T的置为白色,否则置为黑色,若 T T T不同,则转换结果不同。

由于多了一个参数,故而opencv并未将其作为一种转换类型,而是提供了另一个专用的二值化函数threshold,这个函数通过指定阈值和二值化类型,以实现从灰度图到二值图像的转换,当阈值不同时,lena图的二值化情况如下

在这里插入图片描述

bImgs = {}
for th in [50, 100, 150]:ret, bImg = cv2.threshold(img_gray, th, 255, cv2.THRESH_BINARY)bImgs[f"th={th}"] = bImgfor i,key in enumerate(bImgs,1):cv2.namedWindow(key, cv2.WINDOW_NORMAL)cv2.resizeWindow(key, 256, 256)cv2.moveWindow(key, 256*i, 300)cv2.imshow(key, bImgs[key])cv2.waitKey(0)

threshold的输入参数分别是灰度图像、阈值、默认值以及二值化类型,【THRESH_BINARY】表示,当灰度值小于阈值时置0,大于阈值时设为默认值,在本例中就是255。

此外,在打开多个窗口时,用到了resizeWindow和moveWindow来更改窗口尺寸以及移动窗口。

摄像头

除了打开图像文件之外,在opencv中还可以创建VideoCapture对象,可以读取摄像头。下面就打开电脑自带的相机,并将其影像二值化之后展示,效果如下

在这里插入图片描述

绘图代码如下。

cap = cv2.VideoCapture(0, cv2.CAP_DSHOW)
flag = cap.isOpened()
index = 1
while (flag):ret, frame = cap.read()gray = cv2.cvtColor(frame,cv2.COLOR_RGB2GRAY)ret, bImg = cv2.threshold(gray, 125, 255, cv2.THRESH_BINARY)cv2.imshow("camera", bImg)k = cv2.waitKey(1) & 0xFFif k == ord('s'):cv2.imwrite(f"{index}.jpg", bImg)print(f"save{index}.jpg successfuly!")index += 1elif k == ord('q'):breakcap.release()
cv2.destroyAllWindows()

其中,cap即为VideoCapture对象,cap.read用于读取当前帧,其返回值ret是一个成功判定符,frame即为抓取到的图像。在读取图像之后,将其转灰度,并进行二值化,最后在"camera"窗口中显示。

接下来捕捉按键,当检测到按下【s】时,调用imwrite保存图像;当检测到【q】时,退出窗口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/718176.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

32单片机基础:PWM驱动舵机,直流电机

PWM驱动舵机 接线图如上图所示。注意,舵机的5V 线不能接到面包板上的正极,面包板上的正极只有3.3V,是STM32提供的,所以要接到STLINK的5V, 我们如何驱动舵机呢?由之前我们介绍原理知道,要输出如下图对应的PWM波形才行…

AWTK 开源串口屏开发(11) - 天气预报

# AWTK 开源串口屏开发 - 天气预报 天气预报是一个很常用的功能,在很多设备上都有这个功能。实现天气预报的功能,不能说很难但是也绝不简单,首先需要从网上获取数据,再解析数据,最后更新到界面上。 在 AWTK 串口屏中…

数字革命的浪潮:Web3如何改变一切

随着数字技术的不断发展,人类社会正迎来一场前所未有的数字革命浪潮。在这个浪潮中,Web3技术以其去中心化、安全、透明的特性,正在逐渐改变着我们的生活方式、商业模式以及社会结构。本文将深入探讨Web3技术如何改变一切,以及其所…

volatile关键字的作用 以及 单例模式(饿汉模式与懒汉模式的区别及改进)

文章目录 💡volatile保证内存可见性💡单例模式💡饿汉模式💡懒汉模式💡懒汉模式多线程版💡volatile防止指令重排序 💡volatile保证内存可见性 Volatile 修饰的变量能够保证“内存可见性”以及防…

解决连接工具Mobaxterm连接错误Connection timed out----VMware里Linux端口号固定

错误:Connection timed out 原因: 没有固定ip,网络断开,再次连接就是新的IP 解决: 再次测试连接,弹出这个就代表成功了

CUDA 中的线程组织

明朝那些事中有一句话:我之所以写徐霞客是想告诉你,所谓千秋霸业万古流芳,与一件事相比,其实都算不了什么,这件事情就是——用你喜欢的方式度过一生。 我们以最简单的 CUDA 程序:从 GPU 中输出 Hello World…

实现一个简单的哈希映射功能

说在前面 🎈哈希表大家应该都经常用到吧,那么大家有没有想过哈希表是怎么实现的呢?今天让我们一起从一道简单的题目来初步了解一个哈希表的简单原理。 目的 不使用任何内建的哈希表库设计一个哈希映射(HashMap)。 实…

bert 相似度任务训练完整版

任务 之前写了一个相似度任务的版本:bert 相似度任务训练简单版本,faiss 寻找相似 topk-CSDN博客 相似度用的是 0,1,相当于分类任务,现在我们相似度有评分,不再是 0,1 了,分数为 0-5,数字越大…

EasyRecovery易恢复2024免费文件数据恢复软件下载

一、软件概述 EasyRecovery易恢复中文文件数据恢复软件是一款专为中文用户设计的强大数据恢复工具。该软件致力于帮助用户从各种存储设备中恢复因各种原因丢失的中文文件,如文档、图片、视频、音频等。凭借其核心技术和多年的研发经验,EasyRecovery易恢…

C语言计算误码率

#include <stdio.h> #include <stdlib.h> bool dayintrue; //是否打印 int main(){ int i,k,g0; int n10,n20; int good0,bad0; double rate; (dayin)? printf("打印具体数据\n"):printf("不打印具体数据\n\n");…

STM32-SPI通信协议

串行外设接口SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线。 在某些芯片上&#xff0c;SPI接口可以配置为支持SPI协议或者支持I2S音频协议。 SPI接口默认工作在SPI方式&#xff0c;可以通过软件把功能从SPI模式切换…

Python·算法·每日一题(3月4日)最长公共前缀

题目 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀&#xff0c;返回空字符串 “”。 示例 示例 1&#xff1a; 输入&#xff1a;strs ["flower","flow","flight"] 输出&#xff1a;"fl"示例 2&#xff1a;…

【数据结构与算法】常见排序算法(Sorting Algorithm)

文章目录 相关概念1. 冒泡排序&#xff08;Bubble Sort&#xff09;2. 直接插入排序&#xff08;Insertion Sort&#xff09;3. 希尔排序&#xff08;Shell Sort&#xff09;4. 直接选择排序&#xff08;Selection Sort&#xff09;5. 堆排序&#xff08;Heap Sort&#xff09;…

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集

【脑科学相关合集】有关脑影像数据相关介绍的笔记及有关脑网络的笔记合集 前言脑模板方面相关笔记清单 基于脑网络的方法方面数据基本方面 前言 这里&#xff0c;我将展开有关我自己关于脑影像数据相关介绍的笔记及有关脑网络的笔记合集。其中&#xff0c;脑网络的相关论文主要…

【错误处理】【Hive】【Spark】ERROR FileFormatwriter: Aborting job null.

问题背景 近日&#xff0c;使用 Spark 在读写 Hive 表时发生了报错&#xff1a;Aborting job null&#xff0c;如果怎么都使用不了那张表的话&#xff0c;大概率是那张表有脏数据&#xff0c;导致整张表无法正常使用。 ERROR FileFormatwriter: Aborting job null.解决方法 …

SpringBoot 如何快速过滤出一次请求的所有日志?

前言 在现网出现故障时&#xff0c;我们经常需要获取一次请求流程里的所有日志进行定位。如果请求只在一个线程里处理&#xff0c;则我们可以通过线程ID来过滤日志&#xff0c;但如果请求包含异步线程的处理&#xff0c;那么光靠线程ID就显得捉襟见肘了。 华为IoT平台&#x…

《自然》:人工智能在创造性思维方面超越人类

发散性思维被认为是创造性思维的指标。ChatGPT-4 在三项有151名人类参与的**发散思维测试中&#xff0c;**展现出比人类更高水平的创造力&#xff0c;结果显示人工智能在创意领域持续发展。 发散性思维的特点是能够针对没有预期解决方案的问题提出独特的解决方案&#xff0c;例…

TOMCAT的安装与基本信息

一、TOMCAT简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选。对于一个初学者来说&#xff0c;可以这样认为&#xff0c…

IO 与 NIO

优质博文&#xff1a;IT-BLOG-CN 一、阻塞IO / 非阻塞NIO 阻塞IO&#xff1a;当一条线程执行read()或者write()方法时&#xff0c;这条线程会一直阻塞直到读取到了一些数据或者要写出去的数据已经全部写出&#xff0c;在这期间这条线程不能做任何其他的事情。 非阻塞NIO&…

记录踩过的坑-macOS下使用VS Code

目录 切换主题 安装插件 搭建Python开发环境 装Python插件 配置解释器 打开项目 打开终端 切换主题 安装插件 方法1 方法2 搭建Python开发环境 装Python插件 配置解释器 假设解释器已经通过Anaconda建好&#xff0c;只需要在VS Code中关联。 打开项目 打开终端