opencv-04 像素处理

opencv-04 像素处理

在 OpenCV 中,最小的数据类型是无符号的 8 位数。因此,在 OpenCV 中,实际上并没有二值图像这种数据类型,二值图像经常是通过处理得到的,然后使用0表示黑色,使用 255 表示白色。

可以将二值图像理解为特殊的灰度图像,这里仅以灰度图像为例讨论像素的读取和修改。

可以将图像理解为一个矩阵,在面向 Python 的 OpenCV(OpenCV for Python)中,图像就是 Numpy 库中的数组。一个 OpenCV 灰度图像是一个二维数组,可以使用表达式访问其中的像素值。
例如,可以使用 image[0,0]访问图像 image 第 0 行第 0 列位置上的像素点。
第 0 行第 0 列位于图像的左上角,其中第 1 个索引表示第 0 行,第 2 个索引表示第0 列。

为了方便理解,我们首先使用 Numpy 库来生成一个 8×8 大小的数组,用来模拟一个黑色图像,并对其进行简单处理。

使用 Numpy 库生成一个元素值都是 0 的二维数组,用来模拟一幅黑色图像,并对其进行访问、修改。
分析:使用 Numpy 库中的函数 zeros()可以生成一个元素值都是 0 的数组,并可以直接使
用数组的索引对其进行访问、修改。
根据题目要求及分析,编写代码如下:

import numpy as npimg = np.zeros((8,8), np.uint8)print(img)

打印结果:

[[0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0][0 0 0 0 0 0 0 0]]

使用函数 zeros()生成了一个 8×8 大小的二维数组,其中所有的值都是 0,数值类型是
np.uint8。根据该数组的属性,可以将其看成一个黑色的图像,我们可以用img.show 函数来显示一下效果

import cv2
import numpy as npimg = np.zeros((8,8), np.uint8)print(img)cv2.imshow('image', img)cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码因为矩阵相对来说有点小,我们把8,8 改成100,100 来看下效果
在这里插入图片描述
接下来我们可以对图像中的像素值 进行修改
,增加
#修改像素值,将第三行第三列的值改为255
img[2,2] = 255
print(‘修改后的像素值’,img)这两行代码

import cv2
import numpy as npimg = np.zeros((8,8), np.uint8)print(img)#修改像素值,将第三行第三列的值改为255
img[2,2] = 255
print('修改后的像素值',img)cv2.imshow('image', img)cv2.waitKey(0)
cv2.destroyAllWindows()

打印的结果

修改后的像素值 [[  0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0][  0   0 255   0   0   0   0   0][  0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0][  0   0   0   0   0   0   0   0]]

这个时候的图像就会出现一个白点

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

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

相关文章

数据结构初阶--排序1

目录 前言冒泡排序思路代码实现 选择排序思路代码实现 插入排序思路代码实现 希尔排序思路代码实现 堆排序思路向上调整建堆向下调整建堆 代码实现 前言 排序在我们的日常生活中无处不在,比如对若干个学生的期末成绩,可以依据姓氏,学号&…

C# Linq 详解二

目录 概述 七、OrderBy 八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All C# Linq 详解一 1.Where 2.Select 3.GroupBy 4.First / FirstOrDefault 5.Last / LastOrDefault C# Linq 详解二 1.OrderBy 2.OrderByDescending 3.Skip 4.Take 5.Any 6.All C#…

WebSocket从入门到精通

WebSocket 是什么? WebSocket是HTML5规范提出的一种协议;目前除了IE浏览器,其他浏览器都基本支持。它是一种协议,万变不离其宗,也是基于TCP协议的,和HTTP协议是并存的两种协议。HTML5 Web Sockets规范定义了…

SpringBoot 整合RabbitMQ

SpringBoot 整合 RabbitMQ 概念 2007 年发布,是一个在 AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议…

gma 2 教程(二)数据操作:3. 支持生成的栅格格式信息

为了方便了解和选择输出栅格格式、配置高级创建选项,下表列出了gma可以生成(复制/创建/转换)的所有栅格格式的主要信息: 格式名生成模式支持数据类型扩展名多维栅格支持色彩映射表支持的数据类型多波段支持压缩模式AAIGrid复制By…

微擎后台getshell,低权限也可以

/web/index.php?csite&aeditor 这个文件可以编辑html,然后前台会解析成php 没测试最新版 比如编辑专题:/web/index.php?csite&aeditor&dopage&multiid0 上架抓包 改html内容为php 复制前台url 访问之 博客原文: 微擎后…

4、Kubernetes 架构、理解 k8s 架构

kubeadm 用于初始化 Cluster。 kubectl 是 Kubernetes 命令行工具。通过 kubectl 可以部署和管理应用,查看各种资源,创建、删除和更新各种组件。 kubelet 运行在 Cluster 所有节点上,负责启动 Pod 和容器。 Kubernetes Cluster 由 Master 和 Node 组成,节点上运行着若干 Ku…

Python——— 面向对象

(一)初识面向对象 Python完全采用了面向对象的思想,是真正面向对象的编程语言, 完全支持面向对象的基本功能,例如:继承、多态、封装等。 Python 支持面向过程、面向对象、函数式编程等多种编程范 式。 Pyth…

6.2Java EE——Spring的入门程序

下面通过一个简单的入门程序演示Spring框架的使用,要求在控制台打印“张三,欢迎来到Spring”,实现步骤具体如下。 1、在IDEA中创建名称为chapter06的Maven项目,然后在pom.xml文件中加载需使用到的Spring四个基础包以及Spring依赖…

SpringCloud Alibaba微服务分布式架构组件演变

文章目录 1、SpringCloud版本对应1.1 技术选型依据1.2 cloud组件演变: 2、Eureka2.1 Eureka Server : 提供服务注册服务2.2 EurekaClient : 通过注册中心进行访问2.3 Eureka自我保护 3、Eureka、Zookeeper、Consul三个注册中心的异同点3.1 CP…

Amazon 上的数字孪生:使用 L3 预测性数字孪生来预测“行为”

在上一篇博文中,我们讨论了数字孪生的定义和框架,这与我们的客户在其应用中使用数字孪生的方式一致。我们将数字孪生定义为“单个物理系统的动态数字表示,它通过数据进行动态更新以模仿物理系统的真实结构、状态和行为,从而加快获…

2023 node 接入腾讯云短信服务,实现发送短信功能

1、在 腾讯云开通短信服务,并申请签名和正文模板 腾讯云短信 https://console.cloud.tencent.com/smsv2 a、签名即是短信的开头。例如 【腾讯云短信】xxxxxxx; b、正文模板即短信内容, 变量部分使用{1}, 数字从1开始累推。例如&a…