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

这篇具有很好参考价值的文章主要介绍了OpenCV for Python 入坑第二天 :图片处理(1)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

什么是图像处理

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

图像的展示方法

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

  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)
OpenCV for Python 入坑第二天 :图片处理(1),OpenCV,opencv,python,人工智能

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

彩色图像介绍

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

小学二年级我们就学过,光是有三原色组成的,即红、绿、蓝,在计算机中,我们也是用三种颜色按照比例混合而形成不同的颜色。而在这里,我们最常使用的就是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位无符号整数,通常用于表示图像像素等计算机视觉应用中。
OpenCV for Python 入坑第二天 :图片处理(1),OpenCV,opencv,python,人工智能

import numpy

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

我们成功创建了一个1010的数组,接下来,我们尝试在OpenCV中显示我们创建的这一张漂亮的图片。还记得我们昨天所了解到的方法imshow()吗?今天我们将继续使用这个方法,来显示图片。为了图片的更好显示,我们将图片的大小设置为300300
OpenCV for Python 入坑第二天 :图片处理(1),OpenCV,opencv,python,人工智能

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]中任意整数,让机器自动为我们绘制一张漂亮的画吧~
OpenCV for Python 入坑第二天 :图片处理(1),OpenCV,opencv,python,人工智能
如果我们自习观察的话,会发现我们每次创建好的图片都不一样,我们也就成功改变了图像了。在这里,我们使用img[x,y]来定位我们想要改变的像素点,然后生成了一张独一无二的照片哦~(虽然说这和电视机无信号非常相似)


彩色图片存储

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

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


小结

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

到了这里,关于OpenCV for Python 入坑第二天 :图片处理(1)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV处理图片拼接

    读入图片 预处理图片 图片特征提取 特征处理 特征匹配 透视变换 图片再处理 (可选)图片特征点连线配对 Sticher.py 引入头文件 创建类 自定义函数 def stich:外部接口函数 def detectAndDescribe:用于图片的特征点提取,内部逻辑函数 def matchKeypoints:特征点匹配 def drawMatches:显示2图片的特

    2024年02月21日
    浏览(36)
  • OpenCV对图片进行缩放处理

    在下面的代码中,我会为你优化和解释这段程序:

    2024年02月13日
    浏览(43)
  • OpenCV(图像处理)-图片搜索

    Opencv进行图片搜索需要的知识有:特征点匹配+单应性矩阵知识,特征点匹配作者前面文章有记录。 单应性矩阵:两个不同视角上的点所对应的单应性矩阵可以用同一个射影变换来表述可以简单理解为变换矩阵H,x1 = h*x2 分别计算查询图片和训练图片的特征点和特征点的描述子

    2024年02月13日
    浏览(45)
  • 使用OpenCV读取视频、图片并做简单处理

    在conda中安装opencv,打开Anaconda Prompt 使用国内镜像源安装opencv,命令如下: 也可以安装opencv的另一个扩展包opencv-contrib-python,不安装扩展包也可以使用,命令如下: 卸载opencv,使用命令 Pycharm中没有cv2库的提示时,找到cv2安装的路径,将虚拟环境中的 site-packagescv2 中的 cv2

    2024年02月03日
    浏览(49)
  • OpenCV轻松入门(六)——简单图片处理【马赛克、毛玻璃、浮雕效果】

    马赛克效果 马赛克指现行广为使用的一种图像(视频)处理手段,此手段将影像特定区域的色阶细节劣化并造成色块打乱的效果,因为这种模糊看上去有一个个的小格子组成,便形象的称这种画面为马赛克。其目的通常是使之无法辨认。 下面,我们来介绍一下实现马赛克的思

    2024年04月14日
    浏览(46)
  • python opencv比较图片相似度

    目录 一:均值哈希算法 二:三直方图算法 三:单通道直方图 一:均值哈希算法 均值哈希算法是一种快速比较图像相似度的方法。它首先将图像转化为灰度图像,然后计算图像的均值,接着将每个像素的

    2024年02月22日
    浏览(37)
  • 【Ubuntu-20.04】OpenCV-3.4.16的安装并对图片与视频处理

    1.下载OpenCV-3.4.16安装包 官网下载地址:https://github.com/opencv/opencv/releases 2.将安装包放到/home,并解压 3.使用 cmake 安装 opencv (1)进入解压后的文件夹:opencv-3.4.11 (2)进入 root 用户,并更新一下 (3)接着执行这条命令安装 cmake (4)安装依赖库 (5)创建并进入 build 文件夹

    2024年04月25日
    浏览(40)
  • 【java】opencv + Tesseract(tess4j) 实现图片处理验证码识别

    2022/12/27 有的小伙伴说maven导入不了依赖,加了一种方法,百分百解决。 2022/12/28 写了半天,想去论坛放松休息下,结果看到别人已经有成品了,难受啊马飞,晚点看情况要不要写个搭建使用方法(我猜没人看,估计也不用写了,就当自己做个记录) 2023/3/24 更新了一键部署验

    2024年02月08日
    浏览(67)
  • C++实战Opencv第二天——色彩空间转换函数和opencv中图像对象创建与赋值(从零开始,保姆教学)

    OpenCV是一个强大的计算机视觉库,使用C++作为主要编程语言,对于图像处理和计算机视觉领域具有重要意义。其提供了丰富的功能和算法,使得开发者能够快速实现各种图像处理和计算机视觉应用。OpenCV C++为图像处理和计算机视觉领域的开发者提供了一个高效、稳定的工具。

    2024年02月20日
    浏览(43)
  • python 用OpenCV 将图片转视频

     我们无法打开output3.mp4。这可能是因为文件类型不受支 持、文件扩展名不正确或文件已损坏,0xC00D36C4 如果生成的视频报这个错,一般是视频的分辨率 设置的不匹配

    2024年01月17日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包