【基础教程】
【OpenCV】在Python环境下安装OpenCV并检测是否安装成功
【OpenCV】Python OpenCV的基本图像处理操作:读取、显示、保存、获取属性

图像数字化是指用数字表示图像。每一幅数字图像都是由M行N列的像素组成的,其中每一个像素都存储一个像素值。计算机通常会把像素值处理为256个灰度级别,这256个灰度级别分别用区间[0,255]中的数值表示。其中,“0”表示纯黑色;“255”表示纯白色。

一、 像素

像素是构成数字图像的基本单位。当我们放大图像发现许多个小方块组成的,通常把一个小方块称作一个像素。因此,一个像素是具有一定面积的一个块,而不是一个点。需要注意的是,像素的形状是不固定的;大多数情况下,像素被认为是方形的,但有时也可能是圆形的或者是其他形状的。

1、确定像素的位置

图片是由许多像素组成,我们按照水平方向和垂直方向上进行建立向下的坐标系,通过坐标(x,y)的点位置确定像素的位置。

我们需要注意的一点是,坐标的起始位置都是从0开始,横轴的坐标范围为0~366也就是横轴的像素个数为367个,同理纵轴的像素范围0 ~ 199 那么像素个数为200个。

确定像素的位置:

import cv2image = cv2.imread("./imgs/opencv.jpg")# 打印彩色图像的(像素行数,像素列数,通道数)
print("shape =", image.shape)  # shape = (200, 367, 3)# 获取坐标为(167,267)的像素
px = image[167,267]

这里需要注意一下,图像水平方向对应着像素的列数,而垂直方向对应着像素的行数,图像上我们确定像素位置坐标看作是(X,Y)而代码中输出的则是(Y,X)这个之间关系要区别。

2、获取像素的BGR值

我们先了解一下三基色的概念。人眼能够感知红色、绿色和蓝色这3种不同的颜色,因此把这3种颜色称作三基色。如果将这3种颜色以不同的比例进行混合,人眼就会感知到丰富多彩的颜色。
计算机利用色彩空间对颜色编码。也就是说色彩空间是计算机对颜色进行编码的模型。

以较为常用的RGB色彩空间为例,在RGB色彩空间中,存在3个通道,即R通道、G通道和B通道。其中,R通道指的是红色(Red)通道;G通道指的是绿色(Green〉通道;B通道指的是蓝色(Blue))通道;并且每个色彩通道都在区间[0,255]内进行取值。

通常使用一个三维数组来表示一幅图像中某一个像素的RGB值。

这里需要区分一下像素的BGR值与色彩空间RGB值的顺序是相反的。
RGB图像是指用RGB色彩空间显示的图像,BGR图像是指用BGR色彩空间显示的图像;RGB色彩空间和BGR色彩空间的区别是图像在RGB色彩空间中的通道顺序是R→G→B,在BGR的色彩空间中的通道顺序是B→G→R。

import cv2image = cv2.imread("./imgs/opencv.jpg")# 打印彩色图像的(像素行数,像素列数,通道数)
print("shape =", image.shape)  # shape = (200, 367, 3)# 获取坐标为(167,267)的像素
px = image[167,267]# 坐标(167,267)上的像素的BGR值是: [255 87 110]
print("坐标(167,267)上的像素的BGR值是:",px)# 分别获取坐标(167,267)上像素的B通道、G通道和R通道的值。
blue = image[167,267,0]  #坐标(167,267)上的像素的B通道的值
green = image[167,267,1]  #坐标(167,267)上的像素的G通道的值
red = image[167,267,2]  #坐标(167,267)上的像素的R通道的值
print("(B,G,R):",(blue,green,red))  # (B,G,R): (255, 87, 110)

这里说明一点:我们先确定了像素的位置,每个像素其实是一个小方块。
我们可以这样理解,一张图片是由一系列的像素组成的二维矩阵,而每一个像素则对应着BGR色彩空间中的BGR通道值,是一个三维数组。其实也就是,二维矩阵的每个元素都是三维数组。

3、修改像素的BGR值

import cv2image = cv2.imread("./imgs/opencv.jpg")
print(image)# 打印彩色图像的(像素行数,像素列数,通道数)
print("shape =", image.shape)  # shape = (200, 367, 3)# 获取坐标为(167,267)的像素
px = image[167,267]# 坐标(167,267)上的像素的BGR值是: [255 87 110]
print("坐标(167,267)上的像素的BGR值是:",px)image[167,267] = [255,255,255]
#把坐标(291,218)上的像素的值修改为[255,255,255]
print("坐标(167,267)上的像素修改后的BGR值是",px)cv2.imwrite("./imgs/my_save.jpg",image)

4、修改指定区域内的所有像素

import cv2image = cv2.imread("./imgs/opencv.jpg")
cv2.imshow("opencv.jpg", image)# 打印彩色图像的(像素行数,像素列数,通道数)
print("shape =", image.shape)  # shape = (200, 367, 3)# 显示opencv.jpg
for i in range(150, 200):# i表示横坐标:像素行数for j in range(300, 367):# j表示纵坐标:像素列数image[i, j] = [255, 255, 255]  # 把区域内的所有像素都修改为白色cv2.imshow("opencv_demo.jpg", image)  # 显示图opencv_demo.jpgcv2.waitKey()
cv2.destroyAllwindows()  # 关闭所有的窗口时,销毁所有窗口

【OpenCV】图像进行数字化操作:像素确定位置、获取像素BGR值、修改像素BGR值、修改指定区域内像素相关推荐

  1. 2、OpenCV图像的读写操作

    OpenCV图像的读写操作 概要 图像由像素组成. 像素可以被认为是非常小的正方形结构,当连接在一起时会生成图像. 它们是任何图像的最小组成部分. 如果您仔细查看前面的图像,您将能够在图像中看到一些正 ...

  2. opencv图像的基础操作

    目标 • 获取像素值并修改 • 获取图像的属性(信息) • 图像的ROI() • 图像通道的拆分及合并 几乎所有这些操作与Numpy 的关系都比与OpenCV 的关系更加紧密,因此熟练Numpy 可以 ...

  3. C/C++ OpenCV图像的阈值操作

    固定阈值操作:Threshold() double threshold( inputArray src, outPutArray dst, double thresh, double maxval, ...

  4. android 获取图片像素密度,android 获取屏幕的密度和像素 点

    经过测试发现屏幕的像素点 如果 density =1 那么 1dp = 1px density =2 那么 1dp = 2px density =3 那么 1dp = 3px 在字体设置的时候用dp比 ...

  5. 【opencv学习笔记】005之读像素(获取像素)及写像素(修改像素、空白图像、分割图像)

    目录 一.前言 二.图像像素操作 1.读像素 2.写像素 三.全部代码及结果展示 1.代码 2.运行效果图 一.前言 欠下的总是要还的,继续给大家更新有关于OpenCV的教程,我也不知道能不能保证每天 ...

  6. opencv 图像梯度(python)

    图像梯度 图像梯度 Sobel理论基础 计算水平方向偏导数的近似值 计算垂直方向偏导数的近似值 Sobel算子及函数使用 注意点:参数ddepth 方向 计算x方向和y方向的边缘叠加 Scharr算子 ...

  7. opencv中的形态学操作

    形态学操作 1 连通性 在图像中,最小的单位是像素,每个像素周围有8各邻接像素,常见的邻接关系有3种:4邻接.8邻接和D邻接.分别如下图所示: 4邻接:像素p(x,y)的4邻域是:(x+1,y).(x ...

  8. 第三章 Opencv图像像素操作

    目录 1.像素 1-1.确定像素位置 1-2.获取指定像素的像素值 1-3.修改像素的BGR值 2.用numpy模块操作像素 2-1.创建图像 1.创建黑白图像 2.创建彩色图像 3.创建随机图像 2 ...

  9. 【opencv学习笔记】003之图像像素基本操作(获取像素指针、范围处理)及掩膜操作(filter2D)详解

    目录 一.前言 二.图像像素基本操作 1.获取图像像素指针 1.获取图像像素指针是什么? 2.相应API 3.获取目的 2.像素范围处理saturate_cast 1.像素范围处理是什么? 2.像素范 ...

  10. opencv——图像遍历以及像素操作

    摘要 我们在图像处理时经常会用到遍历图像像素点的方式,在OpenCV中一般有四种图像遍历的方式,在这里我们通过像素变换的点操作来实现对图像亮度和对比度的调整. 数据格式千万不要搞错: uchar对应的 ...

最新文章

  1. 关于“Ambiguous match found”
  2. 浅析三层架构与MVC模式的区别
  3. labview将产生数据存入数组 并保存成Excel
  4. Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心
  5. mathematica 可编辑pdf_Mathematica学习笔记[1]
  6. stocker模块量化交易分析
  7. HarmonyOS之深入解析编译构建的配置和代码混淆
  8. IOS之通知NSNotificationCenter的使用
  9. Java面试题及答案,mysql类型
  10. css3自适应 fill-available、fit-content、max-content、min-content
  11. 拖动窗体FormBorderStyle属性为None的窗体移动
  12. heartbeat+DRBD+mysql高可用集群实战
  13. Yii 2.0 权威指南 (5) 应用结构
  14. flash动画制作成品_Flash如何制作雪糕被吃掉的动画
  15. 机器人与matlab——Robotics Toolbox—02建立机器人模型
  16. 新学习的语言Groovy
  17. R语言导入数据文件 (Excel文件、csv文件导入R)
  18. 小白学习Java必练基础题(一)
  19. 如何做好软件测试计划工作?
  20. 计算机毕业设计Java宠物用品交易网站(源码+系统+mysql数据库+lw文档)

热门文章

  1. java 转16进制_java中进制的转换,Byte与16进制的转换方法
  2. sql server 2000 个人版怎么在win7下安装
  3. linux中怎么卸载桌面图标,如何从Ubuntu 18.04桌面上删除垃圾桶图标
  4. 自己的vscode-settings.json配置
  5. 计算机图形学【GAMES-101】12、相机(视场、曝光、光圈(F-Stop)、薄棱镜近似、CoC、景深)
  6. 2019年外卖市场分析:本地外卖创业要注意哪些趋势?
  7. html设备状态监测系统,盾构机状态监测系统
  8. DM8安装及使用DTS工具将oracle11g迁移到centos7.6上的DM8
  9. 新华社和中移动联手打造的搜索引擎盘古搜索开通
  10. 数据库实验第七周【集合查询数据更新】