【Opencv项目实战】图像的像素值反转

news2024/9/23 19:15:32

文章目录

  • 一、项目思路
  • 二、算法详解
    • 2.1、获取图像信息
    • 2.2、新建模板
    • 2.3、图像通道顺序
  • 三、项目实战:彩图的像素值反转(方法一)
  • 四、项目实战:彩图的像素值反转(方法二)
  • 五、项目实战:彩图转换为灰图后,像素值反转

一、项目思路

  1. 读取图像
  2. 获取图像信息
  3. 新建模板
  4. 像素值反转
  5. 显示图像

二、算法详解

2.1、获取图像信息

img.shape[0]:图像的垂直尺寸(高度)
img.shape[1]:图像的水平尺寸(宽度)
img.shape[2]:图像的通道数

2.2、新建模板

作用:根据给定形状和类型,返回全0填充的数组。
函数说明:zeros(shape, dtype=float, order='C')
输入参数:	
			shape:		形状
			dtype:		(可选参数)数据类型,默认numpy.float64。
			order:		(可选参数),c代表行优先;F代表列优先

2.3、图像通道顺序

需注意:Pillow加载图像后的尺寸是二维,图形化是三维,但无法打印三维尺寸。

详细区别:

  • Opencv:uint8的ndarray数据,通道顺序[h, w, c],颜色通道BGR

    • 导入模块:import cv2
      (1)cv2.imread()
      (2)cv2.imshow()
      (3)cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
  • Matplotlib(plt):uint8的ndarray数据,通道顺序[h, w, c],颜色通道RGB

    • 导入模块:import matplotlib.pyplot as plt
      (1)plt.imread()
      (2)plt.imshow()
  • Pillow(PIL):uint8的ndarray数据,通道顺序[h, w, c],颜色通道RGB

    • 导入模块:import PIL
      (1)PIL.Image.open()
      (2)PIL.Image.show()
  • Pythorch:tensor数据,通道顺序[n, c, h, w],颜色通道RGB

    • 导入模块:import torchvision
      (1)torchvision.transforms.ToTensor()
      (2)torchvision.transforms.ToPILImage()

三、项目实战:彩图的像素值反转(方法一)

在这里插入图片描述

import cv2                              # opencv读取的格式是BGR
import matplotlib.pyplot as plt         # Matplotlib是RGB
import numpy as np

img = cv2.imread(r'bee.jpg')	# 读取图像
imgInfo = img.shape				# 读取图像信息
height = imgInfo[0]				# 图像高度
width = imgInfo[1]				# 图像宽度
channel = imgInfo[2]			# 图像通道数

dst = np.zeros((height, width, channel), np.uint8)
for ii in range(channel):
    for jj in range(height):
        for kk in range(width):
            Pixel = img[jj, kk, ii]
            dst[jj, kk, ii] = 255 - Pixel

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 2, 1),    plt.imshow(img),   plt.axis('off'),      plt.title('Raw')
plt.subplot(1, 2, 2),    plt.imshow(dst),   plt.axis('off'),      plt.title('New')
plt.show()

python–图像颜色反转

四、项目实战:彩图的像素值反转(方法二)

在这里插入图片描述

import cv2                              # opencv读取的格式是BGR
import matplotlib.pyplot as plt         # Matplotlib是RGB

img = cv2.imread(r'bee.jpg')
dst = 255 - img

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 2, 1),    plt.imshow(img),   plt.axis('off'),      plt.title('Raw')
plt.subplot(1, 2, 2),    plt.imshow(dst),   plt.axis('off'),      plt.title('New')
plt.show()

五、项目实战:彩图转换为灰图后,像素值反转

在这里插入图片描述

import cv2                              # opencv读取的格式是BGR
import matplotlib.pyplot as plt         # Matplotlib是RGB

img = cv2.imread('starry_night.jpg', 1)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)        # 彩色图像转换为灰度图像(3通道变为1通道)
dst = 255 - gray                                    # 最大图像灰度值减去原图像,即可得到反转的图像

img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2RGB)
dst = cv2.cvtColor(dst, cv2.COLOR_BGR2RGB)
plt.subplot(1, 3, 1),    plt.imshow(img),   plt.axis('off'),      plt.title('Raw')
plt.subplot(1, 3, 2),    plt.imshow(gray),   plt.axis('off'),      plt.title('Gray')
plt.subplot(1, 3, 3),    plt.imshow(dst),   plt.axis('off'),      plt.title('New')
plt.show()

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

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

相关文章

Java中class文件的格式

常见的class文件格式如下图所示,下面我将对一下格式一一作出解释。 一、magic 该部分主要是对语言类型的规范,只有magic这个部分是CAFEBABE时才能被检测为Java语言,否则则不是。 二、minor version和major version minor version主要表示了…

【微信小程序-原生开发】实用教程16 - 查看详情(含页面跳转的传参方法--简单传参 vs 复杂传参)

需在实现列表的基础上开发 【微信小程序-原生开发】实用教程15 - 列表的排序、搜索(含云数据库常用查询条件的使用方法,t-search 组件的使用)_朝阳39的博客-CSDN博客 https://sunshinehu.blog.csdn.net/article/details/129356909 效果预览 …

【计算机网络】数据链路层可靠传输机制的三大协议:停止等待协议SW、后退N帧协议GBN、选择重传协议SR

一、可靠传输实现机制 1.停止等待协议SW case1、确认与否认 在发送端发送数据出现误码时,接收端回复一个NAK否认码,并要求发送端再发送一次。 case2、超时重传 接收端接收不到数据分组时,发送端就会一直处于等待接受端回复ACK或NAK的状态…

32 文件操作

目录 一、文件的概念 二、文件的分类(分类依据:能否使用文本编辑器打开文件) 1、文本文件 2、二进制文件 三、文件操作的步骤 1、打开文件:open()函数 2、打开文件的另一种写法(推荐):with open…

21- PyTorch通过CNN实现手写数字识别 (PyTorch系列) (项目二十一)

项目要点 torch 版本: torch.__version__ # 1.13.1cpu 设置GPU: device torch.device(cuda:0 if torch.cuda.is_available() else cpu) train_ds datasets.MNIST(./, train True, transformtransformation, download True) # 数据导入 transformation transforms.…

Spring高频面试问题汇总

1 什么是spring?Spring是一个轻量级Java开发框架,最早有Rod Johnson创建,目的是为了解决企业级应用开发的业务逻辑层和其他各层的耦合问题。它是一个分层的JavaSE/JavaEE full-stack(一站式)轻量级开源框架,为开发Jav…

Day909.MySQL 不同的自增 id 达到上限以后的行为 -MySQL实战

MySQL 不同的自增 id 达到上限以后的行为 Hi,我是阿昌,今天学习记录的是关于MySQL 不同的自增 id 达到上限以后的行为的内容。 MySQL 里有很多自增的 id,每个自增 id 都是定义了初始值,然后不停地往上加步长。 虽然自然数是没有…

TSP 问题求解的最好方法 LKH

目前可以查到的最好的方法求解TSP问题是 LKH,所以本篇文章介绍如何使用Matlab 调用LKH 参考文档:用matlab调用迄今为止最强悍的求解旅行商(TSP)的算法-LKH算法_wx6333e948c3602的技术博客_51CTO博客 【LKH算法体验】用matlab调用…

游戏玩的多,陪玩你了解的多吗?用Python来采集陪玩数据,看看行情和美照

前言 (。・∀・)ノ゙嗨 大家好 现在应该每个人都玩过游戏吧,有些的上瘾,天天玩停不下来,有些的倒是没啥感觉 有游戏就肯定有陪玩啊,毕竟当朋友忙的时候,自己一个…

天琊超级进程监视器的应用试验(19)

实验目的 1、了解进程概念及其基本原理; 2、掌握天琊超级进程监视器的安装与使用。预备知识 本实验要求实验者具备如下的相关知识。 操作系统的安全配置是整个系统安全审计策略核心,其目的就是从系统根源构筑安全防护体系,通过用户的一…

Linux系统安装Tomcat

(1)登录Tomcat网址 https://tomcat.apache.org/,下载Tomcat安装包(2)登录我们的虚拟机,使用Linux系统中的“rz”命令上传压缩包(注意:如果使用“rz”上传压缩包出现错误时&#xff0…

STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出

STM32模拟SPI时序控制双路16位数模转换(16bit DAC)芯片DAC8552电压输出 STM32部分芯片具有12位DAC输出能力,要实现16位及以上DAC输出需要外挂DAC转换ASIC。 DAC8552是双路16位DAC输出芯片,通过SPI三线总线进行配置控制输出。这里…

苹果新卫星专利公布,苹果Find My功能知多少

根据美国商标和专利局(USPTO)公示的清单,苹果公司获得了一项新的卫星专利,可在非地面网络(Non-Terrestrial Networks,NTN)中定位用户设备(iDevice、MacBook 等)。 在专利…

Docker(六)--Docker网络--单机与跨主机(macvlan)容器通信

文章目录一、本地节点通信1.DNS2.joind网络模式3.端口映射4.跨主机容器通信二、跨主机容器通信1.相同网段进行通信2.不同网段进行通信一、本地节点通信 1.DNS 容器之间除了使用ip通信外,还可以使用容器名称通信。docker 1.10开始,内嵌了一个DNS server。…

【算法进阶】回溯(backtracking)基本逻辑,以及常见回溯问题(全排列、解数独、八皇后)

文章目录一、引言二、回溯法基本逻辑三、回溯法代码模板三、回溯法常见问题3.1 组合逻辑代码3.2 子集逻辑代码3.3 子集Ⅱ(未解答)逻辑代码3.4 分割回文串逻辑代码3.5 组合总和Ⅰ逻辑代码3.6 组合总和Ⅱ(未解答)逻辑代码3.7 组合总…

Mycat

Mycat 1.概述 1.Mycat是数据中间件2.中间件:连接软件组件和应用的计算机软件,便于软件和各部件的交互3.数据中间件:连接Java应用程序与数据库的软件2.适用场景 1.Java与数据库紧耦合(直接连接)2.高访问量高并发对数据库压力(集群)3.读写请求数据不一致(读写分离+主从复制)3.…

关于Gooey复选框CheckBox的使用

折腾了我一下午 官网也没发现具体的使用方法 老是报错 索引超出范围 我就很疑惑 百度也没有答案后来我修改成了非必参 加-- 这是不选中操作这是选中操作他说必须要有一个参数 我有啊 没搞懂 后来 我就这样(根据他报错提示来的)果真就没了问题这样也没问题 具体我还是没搞懂 反正…

K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示

K_A16_001 基于STM32等单片机驱动HX711称重模块 串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RCHX711称重模块1.2、STM32F103C8T6HX711称重模块五、基础知识学习与相关资料下载六、视频效果展…

项目实战典型案例17——环境混用来带的影响

环境混用来带的影响一:背景介绍背景出现的事故二:思路&方案环境混用的危害如何彻底避免环境混用的问题四:总结五:升华一:背景介绍 本篇博客是对对项目开发中出现的环境混用来带的影响进行的总结并进行的改进。目的…

你想知道的OSPF协议知识点都在这里了

1、OSPF协议概述 1)为什么需要动态路由协议? 静态路由是由工程师手动配置和维护的路由条目,命令行简单明确,适用于小型或稳定的网络。静态路由有以下问题:a)无法适应规模较大的网络:随着设备数量增加,配置量…