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

news2024/12/23 14:52:54

【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只会输出一个值。

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

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

相关文章

Linux kill、killall、pkill 命令区别

注:本文为 “Linux kill、killall、pkill” 相关几篇文章合辑。 未整理去重。 kill、killall、pkill、kill -9 区别 区别 进程 ID 唯一,所以 kill 一次只能杀死 1 个进程,其他相同名称的进程仍然存在,而 pkill 和 killall&#…

1139: Coin-row problem

解法&#xff1a; #include <bits/stdc.h> using namespace std; const int N 1e53; int dp[N]; int main() {int n;cin>>n;for (int i1;i<n;i) cin>>dp[i];for (int i2;i<n;i) {dp[i]max(dp[i-1],dp[i-2]dp[i]);}cout<<dp[n]<<endl;retur…

Ubuntu压缩打包解压

ubuntu压缩打包 上图&#xff0c;压缩当前目录svn 为svn.tar.gaz&#xff0c;解压后再当前解压目录生成svn文件 在Ubuntu中&#xff0c;你可以使用tar命令来创建一个压缩包&#xff0c;或者使用zip命令来创建一个.zip压缩文件。以下是两种常见的压缩方法&#xff1a; 下图&am…

Excel 合并工具 将文件复制到目标工作表中与操作日志记录

指定文件夹中读取符合条件的 Excel 文件&#xff0c;将其中的数据按照一定规则复制到目标工作表中&#xff0c;并进行相关的日志记录和工作簿保存操作。 先看下 excel 的结构 合并的结果 log 记录 vba 代码 Sub DeltaCheck()作者和创建时间的注释 定义工作表变量Dim ws As Wor…

Github----提交人不是自己

账号用户名都设置对的,但是提交人不是自己 解决 发现是用户名和账号都夹了"号导致 git config --global user.name "Your Name" git config --global user.email "your.emailexample.com"不用引号 git config --global user.name Your Name git …

ZZCMS2023存在跨站脚本漏洞(CNVD-2024-44822、CVE-2024-44818)

ZZCMS是一款用于搭建招商网站的CMS系统&#xff0c;由PHP语言开发&#xff0c;可快速搭建&#xff1a;医药招商、保健品招商、化妆品招商、农资招商、孕婴童招商、酒类副食类等招商网站。 国家信息安全漏洞共享平台于2024-11-14公布其存在跨站脚本漏洞。 漏洞编号&#xff1a…

[免费]SpringBoot+Vue企业OA自动化办公管理系统【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue企业OA自动化办公管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue企业OA自动化办公管理系统 Java毕业设计_哔哩哔哩_bilibili 项目介绍 随着信息技术在管理上越来越深入…

【MySQL】表的基本查询(下)

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…

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

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

机器学习--张量

机器学习–张量 机器学习的数据结构–张量 张量是机器学习程序中的数字容器&#xff0c;本质上就是各种不同维度的数组&#xff0c;如下图所示。 张量的维度称为轴&#xff08;axis&#xff09;&#xff0c;轴的个数称为阶&#xff08;rank&#xff09; 标量–0D张量 impor…

3D 视觉定位技术:汽车零部件制造的智能变革引擎

在汽车零部件制造领域&#xff0c;传统工艺正面临着前所未有的挑战。市场对于零部件精度与生产效率近乎苛刻的要求&#xff0c;促使企业寻求突破之道。而 3D 视觉定位技术&#xff0c;为汽车零部件制造开启了精准定位与智能化生产的新纪元。 3D 视觉定位系统的核心技术原理 3…

uni-app之web-view组件 postMessage 通信【跨端开发系列】

&#x1f517; uniapp 跨端开发系列文章&#xff1a;&#x1f380;&#x1f380;&#x1f380; uni-app 组成和跨端原理 【跨端开发系列】 uni-app 各端差异注意事项 【跨端开发系列】uni-app 离线本地存储方案 【跨端开发系列】uni-app UI库、框架、组件选型指南 【跨端开…

数据结构 (37)外排序的基本方法

前言 外排序&#xff08;External Sorting&#xff09;是指处理那些无法完全加载到内存中的数据集时所使用的排序方法。由于数据量巨大&#xff0c;无法一次性全部放入内存&#xff0c;因此需要使用外部存储设备&#xff08;如磁盘&#xff09;来辅助排序过程。外排序的基本方法…

「Mac玩转仓颉内测版49」小学奥数篇12 - 图形变换与坐标计算

本篇将通过 Python 和 Cangjie 双语实现图形变换与坐标计算。这个题目帮助学生理解平面几何中的旋转、平移和对称变换&#xff0c;并学会用编程实现坐标变化。 关键词 小学奥数Python Cangjie图形变换坐标计算 一、题目描述 编写一个程序&#xff0c;模拟以下三种图形变换&a…

springboot系列--拦截器加载原理

一、拦截器加载原理 拦截器是在容器启动时&#xff0c;就创建并加载好&#xff0c;此时并未放入拦截器链中&#xff0c;只是放在一个拦截器集合当中&#xff0c;当一个请求进来之后&#xff0c;会通过匹配路径&#xff0c;查看是否有命中集合中的拦截器的拦截路径&#xff0c;如…

高通QCA-WiFi-10.4驱动源码解析文档:无线驱动开发的利器

高通QCA-WiFi-10.4驱动源码解析文档&#xff1a;无线驱动开发的利器 【下载地址】高通QCA-WiFi-10.4驱动源码解析文档分享 本仓库提供了一份高通最新的QCA-WiFi-10.4驱动源码解析文档&#xff0c;该文档对于无线驱动开发人员来说&#xff0c;是一份非常宝贵的帮助资料。通过这份…

数据结构与算法 五大算法

文章目录 1&#xff0c;时间复杂度与空间复杂度 2&#xff0c;插入排序 3&#xff0c;希尔排序 4&#xff0c;选择排序 1&#xff0c;单趟排序 2&#xff0c;选择排序PLUS版本 5&#xff0c;冒泡排序 6&#xff0c;快速排序 1&#xff0c;hoare版本 2&#xff0c;挖坑法 前言 …

数据链路层总结

- - 链路、物理链路&#xff1a;两节点间物理线路&#xff08;有线、无线&#xff09;&#xff0c;中间没有任何其他的交换节点 数据链路、逻辑链路&#xff1a; 链路 协议需要的硬件、软件 网络适配器(网卡)&#xff1a;包含物理层、数据链路层 网络适配器软件驱动程…

入门pytorch-Transformer

前言 虽然Transformer是2017年由Google推出&#xff0c;如果按照读论文只读近两年的思路看&#xff0c;那它无疑是过时的&#xff0c;但可惜的是&#xff0c;目前很多论文的核心依然是Transformer&#xff0c;或者由其进行改进的&#xff0c;故本文使用pytorch来搭建一下Trans…

PHP中GD库的使用

由于我要用到php的验证码 <?php session_start();// 生成验证码 $random_code substr(md5(uniqid(mt_rand(), true)), 0, 6);// 将验证码保存到 session 中 $_SESSION[captcha] $random_code;// 创建图片 $font 6; $image_width 100; $image_height 40;// 创建图像 $…