python学opencv|读取图像(六)读取图像像素RGB值

【1】引言

前序已经掌握了如何获取灰度图像的像素,文章链接为:

python学opencv|读取图像(五)读取灰度图像像素-CSDN博客

实际上像素就像一个坐标轴,约束了图像的大小。

但实际上我们在学习过程中,对于同一张图片,将其从彩色转化为灰色,一定改变了它各个像素点上颜色的组成。为此,我们继续深究,查阅每个像素点上的BGR。

为何是BGR而不是RGB,有两个原因:

【a】构成世界各种颜色的三种基色分别是红色(Red)、绿色(Green)和蓝色(Blue),这三种基色可以合起来简称RGB;

【b】计算机往往采用BGR的顺序组成彩色,且每种基色的取值范围都是[0,255]。

因此,我们查询图片每个像素点上的颜色组成时,看到的是按照BGR顺序输出的颜色。

【2】代码测试

【2.1】图片读取

首先完成灰度图片的读取,在pycharm等编辑器中输入下述代码:

import cv2 as cv #引入cv2模块
image=cv.imread("cv019.png",0) #读取图片,将其转化为灰度图
if image is not None: #成功读取图片
    cv.imshow('cvtest', image)  # 显示为灰度图
    cv.imwrite('opencv-gray.jpg', image) #保存灰度图
    shape= image.shape
    size = image.size
    dtype= image.dtype
    print('像素大小shape=',shape)
    print('总像素个数size=',size)
    print('图像数据类型dtype=',dtype)
    cv.waitKey()  # 图片显示时间
    cv.destroyAllWindows()  # 释放所有窗口
else: #未找到图片
    print("Error: 图片无法加载")

cv019依然是本次测试用的图片:

图1

运行代码后,新获得的图片为:

图2

【2.2】灰度图片像素BGR读取

首先完成灰度图片的读取,在pycharm等编辑器中输入下述代码:

在上述代码中,新增一行,制定读取像素数=[100,100]位置处的图像BGR。

print("像素数为[100,100]位置处的BGR=",image[100,100]) #获取像素数为[100,100]位置处的BGR

此时的完整代码为:

import cv2 as cv #引入cv2模块
image=cv.imread("cv019.png",0) #读取图片,将其转化为灰度图
if image is not None: #成功读取图片
    cv.imshow('cvtest', image)  # 显示为灰度图
    cv.imwrite('opencv-gray.jpg', image) #保存灰度图
    shape= image.shape
    size = image.size
    dtype= image.dtype
    print('像素大小shape=',shape)
    print('总像素个数size=',size)
    print('图像数据类型dtype=',dtype)
    print("像素数为[100,100]位置处的BGR=",image[100,100]) #获取像素数为[100,100]位置处的BGR
    cv.waitKey()  # 图片显示时间
    cv.destroyAllWindows()  # 释放所有窗口
else: #未找到图片
    print("Error: 图片无法加载")

运行代码后,获得的输出为:

图3

在这里,我们看到BGR只输出了一个数,理论上应该输出三个数才对。带着疑问,我们尝试对彩色图像进行BGR读取。

【2.3】彩色图片像素BGR读取

首先完成彩色图片的读取,在pycharm等编辑器中将图片读入的代码改为下述形式:

image=cv.imread("cv019.png") #读取彩色图片

在imread(photoname,colorpar)函数中,photoname代表要读取的图片的名字,colorpar=0时就会输出灰度图片,不输入colorpar参数的值,就不会把彩色图片转为灰度图片。

运行代码后的输出为:

图4

在图4中,会看到BGR确实输出了 三个数,与此同时像素大小shape的输出在垂直和水平方向上的像素大小之外,多出了一个3。

这是因为,如果把BGR每一种颜色都看做一个通道,彩色图片有3个通道,灰度图片只需要一个通道。

所以彩色图片按照顺序输出了BGR值,一共有三个数据;灰度图片只需要输出一个数据。

【2.4】灰度和彩色图片像素BGR读取

改写代码,同时读入灰度和彩色图像:

image=cv.imread("cv019.png") #读取图片,将其转化为灰度图
image1=cv.imread("cv019.png",0) #读取图片,将其转化为灰度图

然后将彩色图像和灰度图像分别保存:

cv.imwrite('opencv-Color.jpg', image) #保存灰度图
cv.imwrite('opencv-Gray.jpg', image1) #保存灰度图

再然后分别将灰度和彩色图片的像素属性进行读取,并对像素位置[500,600]处进行BGR读取:

shape= image.shape
size = image.size
dtype= image.dtype
shape1= image1.shape
size1 = image1.size
dtype1= image1.dtype
print('彩色图像像素大小shape=',shape)
print('彩色图像总像素个数size=',size)
print('彩色图像的图像数据类型dtype=',dtype)
print("彩色图像像素数为[500,600]位置处的BGR=",image[500,600]) #获取像素数为[100,100]位置处的BGR
print('灰度图像像素大小shape=', shape1)
print('灰度图像总像素个数size=', size1)
print('灰度灰度图像的图像数据类型dtype=', dtype1)
print("灰度图像像素数为[500,600]位置处的BGR=", image1[500, 600])  # 获取像素数为[100,100]位置处的BGR

运行代码后,获得的彩色图像如图1,灰度图像如图2,其余内容为:

图5

如前所述,彩色图像因为有3个通道,所以输出了BGR三个值;灰度图像只有一个通道,在BGR位置处只输出了一个值。

【3】总结

掌握了获取灰度图像和彩色图像在特定像素位置处的BGR值。经测试发现,彩色图像的BGR会输出三个值,灰度图像的BGR只会输出一个值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ThingsBoard规则链节点:RabbitMQ 节点详解

ThingsBoard 是一个开源的物联网平台,允许开发者快速构建IoT产品。它提供了设备连接、数据收集、处理和可视化等功能。为了实现高效的数据处理和消息传递,ThingsBoard 集成了多种消息队列服务,其中就包括了RabbitMQ。 RabbitMQ 是一个广泛使用…

如何创建基于udp的客户端和服务端

1.先创建好udpServer.hpp、udpServer.cc、udpClient.hpp、udpClient.cc的框架。 #pragma once #include <string> #include <iostream> #include <sys/types.h> #include <sys/socket.h> #include <unistd.h> #include <cerrno> #include…

TCP 2

文章目录 Tcp状态三次握手四次挥手理解TIME WAIT状态 如上就是TCP连接管理部分 流量控制滑动窗口快重传 延迟应答原理 捎带应答总结TCP拥塞控制拥塞控制的策略 -- 每台识别主机拥塞的机器都要做 面向字节流和粘包问题tcp连接异常进程终止机器重启机器掉电/网线断开 Tcp状态 建…

ChatGPT Pro是什么

ChatGPT Pro 和 ChatGPT Plus 的区别主要体现在功能范围、适用场景和目标用户上。 ChatGPT Plus 功能 • 价格&#xff1a;20美元/月。 • 目标用户&#xff1a;针对个人用户设计。 • 主要特点&#xff1a; • 在高峰期响应速度更快。 • 使用高级模型&#xff08;如 GPT-4…

【开源免费】基于Vue和SpringBoot的桂林旅游景点导游平台(附论文)

博主说明&#xff1a;本文项目编号 T 079 &#xff0c;文末自助获取源码 \color{red}{T079&#xff0c;文末自助获取源码} T079&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

C++ day3——C++核心

作业&#xff1a; 整理思维导图 2、整理课上代码 3、把课上类的三个练习题的构造函数写出来 1、定义一个矩形类Rec #include <iostream>using namespace std; class Rec {const int length;int width; public:Rec(int length,int width):length(length),width(width)…

目前Java后端就业前景到底怎么样?

很多人都说今年对于IT行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求&#xff0c;实际并不招人&#xff1b;在行业内的程序员基本都已经感受到了任老前段时间口中所谓的“寒气”。 虽然事实确实是如此&…

倚光科技助力自由曲面设计与加工

近年来&#xff0c;自由曲面因其在光学、汽车、航空航天等领域的广泛应用&#xff0c;受到设计师和工程师的高度关注。自由曲面作为一种具有更高自由度的非球面透镜&#xff0c;能够在光学系统中实现更加精确的光线控制&#xff0c;优化像差校正&#xff0c;并且在满足功能需求…

算法论文/半监督1——2024最新半监督目标检测综述(CNN和Transformer)全文1.5W字

Semi-Supervised Object Detection: A Survey on Progress from CNN to Transformer 摘要 半监督学习的惊人进步促使研究人员探索其在计算机视觉领域内目标检测任务中的潜力。半监督对象检测 &#xff08;SSOD&#xff09; 利用小型标记数据集和较大的未标记数据集的组合。这…

在Windows 10中使用SSH远程连接服务器(附花生壳操作方法)

SSH 在 linux 中是一种重要的系统组件&#xff0c;用户可以使用 SSH 来远程连接 linux 系统的计算机&#xff0c;或者传输文件。不过在 win10 以前&#xff0c;windows 并不原生支持 SSH&#xff0c;需要借助第三方工具来使用 SSH 功能。而实际上&#xff0c;微软在 2015 年就曾…

自动秒收录程序与自动秒收录网站源码论坛版本下载

自动秒收录程序与自动秒收录网站源码论坛版本下载 随着互联网的快速发展&#xff0c;网站优化已成为众多企业和个人博主提升在线影响力的关键手段。其中&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;作为提升网站排名的核心策略&#xff0c;备受关注。而SEO优化的一个…

在Goland中对goroutine协程断点调试

在Goland中对goroutine协程断点调试 环境: Goland 参考了 chatgpt 的回复 进行断点调试的代码 package mainimport ("fmt""sync""time" )// worker 模拟处理任务 func worker(id int, wg *sync.WaitGroup) {defer wg.Done() // 确保任务完成后…

Sublime Text 64位:前端及全栈开发利器

本文还有配套的精品资源&#xff0c;点击获取 简介&#xff1a;Sublime Text作为一款高效的文本编辑器&#xff0c;在前端网页开发领域受到广泛青睐&#xff0c;特别是其64位版本在处理大型项目和高内存需求的场景下表现出色。编辑器内置Emmet插件&#xff0c;提供代码高亮、…

css矩形样式,两边圆形

废话不多说&#xff0c;代码如下&#xff0c;直接拷贝即可使用&#xff1a; index.vue文件 <template><view class"wrap"><view class"tabs"><view class"tab active"><view class"name">标签</view…

Spring Boot 3 中Bean的配置和实例化详解

一、引言 在Java企业级开发领域&#xff0c;Spring Boot凭借其简洁、快速、高效的特点&#xff0c;迅速成为了众多开发者的首选框架。Spring Boot通过自动配置、起步依赖等特性&#xff0c;极大地简化了Spring应用的搭建和开发过程。而在Spring Boot的众多核心特性中&#xff…

C# MVVM 牛牛的实现依赖注入和MVVM绑定(DependencyInjection+CommunityToolkit)

这段时间在网上发现搜索MVVM数据绑定时&#xff0c;发现很多都是最基本的数据绑定&#xff0c;完全没有考虑依赖注入的问题&#xff0c;这里实现一下我们的方法&#xff0c;让我们的数据绑定和依赖注入都变得简单起来。 安装资源包 首先我们要下载一下资源包DependencyInject…

最小二乘法拟合出二阶响应面近似模型

背景&#xff1a;根据样本试验数据拟合出二阶响应面近似模型&#xff08;正交二次型&#xff09;&#xff0c;并使用决定系数R和调整的决定系数R_adj来判断二阶响应面模型的拟合精度。 1、样本数据&#xff08;来源&#xff1a;硕士论文《航空发动机用W形金属密封环密封性能分析…

05-标准库开发-STM32-IIC协议

七、STM32中IIC协议 概述 Inter-Integrated Circuit (IIC)&#xff0c;也常称为I2C&#xff08;I squared C&#xff09;&#xff0c;是一种同步、串行、半双工通信总线协议。它主要用于连接低速外围设备到处理器或微控制器上&#xff0c;如MPU6050姿态传感器、OLED显示屏、存…

Java版-图论-最小生成树-Prim算法

实现描述 如图&#xff1a; Prim算法的基本思想是从一个顶点开始&#xff0c;逐步构建最小生成树。具体步骤如下&#xff1a; 随机选取一个顶点作为起始点&#xff0c;并将其加入最小生成树的集合中。从该顶点出发&#xff0c;选择一条边连接到其他未被访问的顶点中的最小权…

CSS学习记录09

CSS字体 通用字体族 在CSS中&#xff0c;有5个通用字体族&#xff1a; 衬线字体&#xff08;Serif&#xff09;- 在每个字母的边缘都有一个小的笔触。它们营造出一种形式感和优雅感。无衬线字体&#xff08;Sans-serif&#xff09;- 字体线条简洁&#xff08;没有小笔画&…