OpenCV for Python 入坑第二天 :图片处理(1)

news2024/11/14 2:55:06

上一篇博客我们简单了解了一下如何打开图片、保存图片、创建窗口等等。那么今天我们就来尝试一下完成OpenCV基础操作——图像的处理

文章目录

  • 什么是图像处理
  • 图像的展示方法
    • 灰度图像介绍
    • 彩色图像介绍
  • 图像的像素修改
    • OpenCV的图像存储方式
    • NumPy创建图像
    • 彩色图片存储
  • 小结

什么是图像处理

图像处理是指对数字图像进行操作和改变其外观、属性或质量的技术和方法。它涉及到数字图像的获取、存储、传输和处理等各个方面。图像处理可以用于各种应用,例如医学图像、视觉检测、计算机视觉、图像识别、数字图像增强、图像复原等领域。它是数字信号处理和计算机视觉等领域的基础。

图像的展示方法

我们都知道,相机可以拍出彩色和黑白的相片。这转换成计算机中的程序用于就是图像的表示方法。我们在这里简单介绍几种图像的表示方法,有以下几种:

  1. 二进制位图(Bitmap):使用像素点的二进制值表示图像。

  2. 矢量图(Vector):使用数学公式记录图像中的线条、曲线等形状信息。

  3. 灰度图像(Grayscale):使用像素点的灰度值表示图像,灰度值越大,像素越黑,反之越白。

  4. 压缩图像(Compressed):使用一种压缩算法使图像文件大小大幅减小,例如JPEG、PNG等格式。

  5. 颜色索引图像(Indexed Color):将颜色值存储在一个颜色索引表中,然后将每个像素的颜色值与颜色索引表中的颜色值进行匹配。

  6. 透明图像(Transparent):除了能显示出图像边缘和内容的像素以外,还包括能够使图像透明的像素。

  7. 三维图像(3D):使用三维坐标系表示的图像,可以与虚拟现实、计算机游戏等领域结合使用。

上面都是图像的不同表现形式,我们可以将上面的多种图像形式整合成下面两个大类。即灰度图像彩色图像

灰度图像介绍

灰度图像表现的是一种由白色到黑色区间来取色的图像。图像采用了更多的数值来展现不一样的效果。一般来说,有256个灰度级,我们会使用[0,255]的灰度区间来表示。其中255表示的是纯白色,0表示的是纯黑色。

首席二进制的朋友们都知道28的值正好是256,也就是说,这个数值刚好可以用一个字节来表示一个数值(由于一个字节等于8个BIT)
在这里插入图片描述

上一篇博客我们也看到了如何生成一张灰度图像。

彩色图像介绍

我们在日常生活中,更常见到的是彩色图像,它能展现更加丰富的细节信息。

小学二年级我们就学过,光是有三原色组成的,即红、绿、蓝,在计算机中,我们也是用三种颜色按照比例混合而形成不同的颜色。而在这里,我们最常使用的就是RGB色彩空间。

RGB,即Red Green Blue 三者组合在一起,就可以形成各种各样的颜色。在计算机中,我们有三个分别是红绿蓝的通道,这三个通道的范围都是从0到255共256个梯度值。也就是说,我们可以使用RGB编码,调出25631677216种颜色

在这里需要特别注意的是,OpenCV中,三个通道的顺序是B到G到R,这和一般的RGB从R到G到B有些许差别。


图像的像素修改

OpenCV的图像存储方式

在OpenCV中,图像是一个NumPy中的数组。在灰度图像中,每一个图像就是一个二维数组。我们可以使用NumPy中的读取方法img[1,1]来访问图像img中第一列第一行上的像素点。


当我们了解了如何更改图像后,我们现在就来从无到有创建一个图像吧~

NumPy创建图像

我们使用zeros()来创建数组,这个函数出那个就按的所有元素都将会使用0来填充。并且传入我们想创建的数组大小和数据类型,由于NumPy创建的数组默认是浮点数,而我们图像并不支持这种类型。所以我们要将其转换一种能存储0到255之间的整数值,NumPy中恰好就有这样一种数据类型。

numpy.uint8是NumPy中的一种表示8位无符号整数,通常用于表示图像像素等计算机视觉应用中。
在这里插入图片描述

import numpy

img = numpy.zeros((10,10),dtype = numpy.uint8)
print(img)

我们成功创建了一个1010的数组,接下来,我们尝试在OpenCV中显示我们创建的这一张漂亮的图片。还记得我们昨天所了解到的方法imshow()吗?今天我们将继续使用这个方法,来显示图片。为了图片的更好显示,我们将图片的大小设置为300300
在这里插入图片描述

import numpy
import cv2

img = numpy.zeros((300,300),dtype = numpy.uint8)
# print(img)
cv2.imshow("NumPy To OpenCV",img)
cv2.waitKey(0)

接下来,我们改变某一点的像素,我们可以使用Random库中的randint()随机生成[0,255]中任意整数,让机器自动为我们绘制一张漂亮的画吧~
在这里插入图片描述
如果我们自习观察的话,会发现我们每次创建好的图片都不一样,我们也就成功改变了图像了。在这里,我们使用img[x,y]来定位我们想要改变的像素点,然后生成了一张独一无二的照片哦~(虽然说这和电视机无信号非常相似)


彩色图片存储

前面我们说过,在OpenCV中,==照片的读取是先读取B通道,再读取G通道,最后读取R通道。也就是说,OpenCV将会以BGR模式存储三维数组来保存图片。分析完成后,我们来创建一个有三通道的三维数组空间。这个时候我们需要向程序中多传一个参数。
在这里插入图片描述
此时,传入的第三个参数代表的是通道的数量。
在这里插入图片描述
此时,我么可以看到NumPy真的创建了一个三通道的数组。我们定位一个位置,然后将这个位置改成一个BGR的值,所以说,我们将所有东西都随机转换成了一个图片呢~
在这里插入图片描述

那假如说我们想要定位一个特殊的Blue通道该怎么办呢?我们可以使用img[0,0,0]=255,将(0,0)位置上的Blue通道位置上的像素值改成255~ 如果说是G通道,传入的参数则是1;R通道传入的参数则是2


小结

今天我们了解了OpenCV中的存储方式。我们通过NumPy创建了一个二维和三维数组,并且创造了一幅属于我们自己的图片。我们还了解到BGR是OpenCV的存储方式,B通道对应的参数是0,依次类推。更改NumPy中数组的值,只需要成功定位到对应的位置进行修改就可以了。在彩色照片中,如果要修改对应位置的值,我们需要传入三个BGR参数值,但若是我们指定某一通道,我们只需要传入对应通道的像素值就行

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

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

相关文章

用WinDBG调试DMP文件

把对应工程的pdb文件,放到C盘下的一个文件夹,例如 C:\mysymbols 打开WinDBG,选择File -> Symbol File Path , 输入C:\mysymbols\;SRV*C:\symbols*http://msdl.microsoft.com/download/symbols,然后OK (这可以使W…

微服务系列文章 之 Nginx状态监控日志分析详解

1、Nginx状态监控 Nginx提供了一个内置的状态信息监控页面可用于监控Nginx的整体访问情况,这个功能由ngx_http_stub_status_module模块进行实现。 使用nginx -V 2>&1 | grep -o with-http_stub_status_module命令检测当前Nginx是否有status功能&#xff0c…

德哥说库-MySQL数据类型

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA工作经验 一位上进心十足的【大数据领域博主】!😜&#x1f61…

【Mac使用笔记】之 Homebrew

Homebrew更新: brew update && brew upgrade 当出现错误: fatal: couldnt find remote ref refs/heads/master 执行: brew tap --repair Ruby安装: 1、查看当前Homebrew版本: brew --version2、查看当前…

在Console无图形界面程序使用SetTimer

UpdateData(true);将控件的值赋值给成员变量 UpdateData(false);将成员变量的值赋值给控件 UpdateData;用来刷新当前对话框 也就是说:当你使用了ClassWizard建立了控件和变量之间的联系后:当你修改了变量的值,而希望对话框控件更新显示,就应该…

Android手写占位式插件化框架之apk解析原理系统源码分析

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂,风趣幽默",感觉非常有意思,忍不住分享一下给大家。 👉点击跳转到教程 前言: 上一篇文章 Android手写占位式插件化框架之Activity通信、Service通…

服务器与客户端数据交换(Rest API)

服务器端 Rest API 输出普通对象 AjaxResponse jsonObj AjaxResponse.success(body);log.info("{} json:{}",RestResponseBodyAdvice.class,jsonObj.toString());return jsonObj;AjaxResponse(successtrue, code200, messageThis is normal, contentUserVO(id1, …

模拟实现strcpy

隔了一段时间没有更新博客了,今天给大家带来的是:如何用C语言模拟实现 strcpy 函数 赶时间的朋友建议直接复制走代码,我会在下面详细剖析代码 引言 在计算机编程中,字符串处理是一个非常重要的部分。strcpy函数是C语言中用于复制…

16 | 视图:如何实现服务和数据在微服务各层的协作?

目录 服务的协作 1. 服务的类型 2. 服务的调用 微服务内跨层 微服务之间的服务调用 领域事件驱动 3. 服务的封装与组合 基础层 领域层 应用层 用户接口层 4. 两种分层架构的服务依赖关系 松散分层架构的服务依赖 严格分层架构的服务依赖 数据对象视图 基础层 领…

electron-updater 报错 Cannot find module ‘debug‘

使用 electron-updater 更新 electron 应用,打完包安装启动出现这种报错:Cannot find module debug,Cannot find module builder-util-runtime。 项目依赖 {"electron": "^24.4.1","electron-builder": "…

【机器学习】了解 AUC - ROC 曲线

一、说明 在机器学习中,性能测量是一项基本任务。因此,当涉及到分类问题时,我们可以依靠AUC - ROC曲线。当我们需要检查或可视化多类分类问题的性能时,我们使用AUC(曲线下面积)ROC(接收器工作特…

第68篇:javafx编写扫描器UI界面的线程死锁问题及坑点总结

Part1 前言 大家好,我是ABC_123。之前编写工具的图形界面都是用swing框架来实现,但是swing框架已经10几年没有更新了,很多控件使用起来特别麻烦,然后界面美工需要花费很大精力。为了跟上知识更新的节奏,ABC_123最近花…

语言模型的自洽性思维链推理技术

论文标题:Self-Consistency Improves Chain of Thought Reasoning in Language Models 论文链接:https://arxiv.org/abs/2203.11171 论文来源:ICLR 2023 一、概述 尽管语言模型在一系列NLP任务中展现出了显著的成功,但它们在推理能…

django使用channels实现webSocket启动失败

问题描述 使用channels启动ASGI结果却是普通启动,如下: Watching for file changes with StatReloader Performing system checks...System check identified no issues (0 silenced). July 15, 2023 - 18:23:49 Django version 4.2, using settings s…

chatGPT 和AlphaGo下围棋,谁赢?垂域大模型有戏么?

这边来的少,但发个文章通报下近况,长期做AI产研、投融资工作后,后续主要在企业数字化与大模型结合的方向上,后续进展还是请关注:琢磨事。 上一篇提到最终大模型的格局很可能是有一个偏通用大模型,比如chatG…

Linux系统编程——文件(ioctl 函数)

文章目录 概念用户空间 ioctl驱动程序 ioctlioctl 在用户与驱动之间的协议——命令码实例分析ioctl-test.hioctl-test-driver.cioctl-test.c 概念 ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开、关闭、读、写等功能,在一…

GitOps自问自答

GitOps自提出以来受到很多关注,被认为是云原生最佳实践之一。这篇文章回答了关于GitOps的常见问题,帮助感兴趣的相关人员更好理解这一实践。原文: GitOps[1] 自从Weaveworks在2017年提出GitOps以来,已经在Twitter和KubeCon上引发了不少争议。…

Qt实现思维导图功能6『鹰眼视图』

前文链接:Qt实现思维导图功能5『纵向分布模式』 百度网盘体验地址: 链接:https://pan.baidu.com/s/1xotlkSPfG7E_37y_XPfDng 提取码:5li7效果图 1、动态演示效果: 思维导图-鹰眼视图 2、静态展示图片: 新…

Econ3107-econ5116-小组作业知识点精讲

对本文有疑问可以加微信 Tutor_0914联系。也可以访问我的个人辅导网站 : tutoryou 基本概念 option期权 期权(Option),是一种选择权,指是一种能在未来某特定时间以特定价格买入或卖出一定数量的某种特定商品的权利…

Linux 知识学习总结

常用命名 du 作用:显示指定目录或文件所占磁盘空间大小。 示例: du -h 以K,M,G为单位自动适配显示 lxlx-virtual-machine:~/test/video$ du -h 1.2G du -m 指定以1MB为单位显示 lxlx-virtual-machine:~/test/video$ du -m 12…