从0开始的OpenCV图像处理(二)

Image Basics

​ 一切的开始:图像的基础-像素(pixel),如何通过像素生成图像,如何通过OpenCV来操控图像中的像素点。

像素的定义

熟悉的可以暂时跳过这一段,主要来科普图像的组成。比如说我们常见的一个显示器的分辨率是1080p(蓝光)其标准大小为1920x1080 也就是,长:1920个像素;宽:1080个像素点。合起来总共是1920x1080=2073600个像素点。

目前我们常见的图像都是由两个东西组成:灰度值和色彩。灰度值:0~255,其中0为黑,而255为白,中间值称为灰色。色彩:由 R(Red) G(Green) B(Blue)组成,其值也是在0~255的范围内。

坐标系

图像表示为像素网格。想象我们的网格就像一张方格纸。使用此方格纸,点(0,0)对应于图像的左上角。当我们向下和向右移动时,x和y值都会增加。

源代码

像素点操作:

from __future__ import print_function
import argparse
import cv2

ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required = True,
                help = "Path to image")
args = vars(ap.parse_args())

image = cv2.imread(args["image"])
cv2.imshow("Original", image)

和之前一样,11行代码用来处理从命令行传进来的硬盘上的图像数据,并将数据存储为 numpy的数组形式。

OpenCV将图像存储为数组,可以将其理解为一个矩阵,只需要提供具体的xy的值就可访问对应的像素点。得到的返回数据应该是由R, G, B三个元素组成的数组,但是OpenCV实际上是由 **蓝(B)、绿(G)、红®**的方式存储颜色数据,而非正常的 红、蓝、绿。

(b, g, r) = image[0, 0]
print("Pixel at (0, 0) - Red:{}, Green:{}, Blue:{}".format(r, g, b))

image[0, 0] = (0, 0, 255)
(b, g, r) = image[0, 0]
print("Pixel at (0, 0) - Red:{}, Green:{}, Blue:{}".format(r, g, b))

获取位于(0,0)图像位置上的像素点信息,该像素返回的元素是以元组的形式,而且是以b, g, r的顺序从数组中获取相关色彩值,最后将他们输出到可视化界面中。

随后,操纵图像中位于坐标(0,0)的左上像素,并将其值设置为(0,0,255)。如果以RGB格式读取此像素值,则红色的值为0,绿色的值为0,蓝色的值为255,因此使其成为纯蓝色。将像素设置为红色后,获取像素值,并将其打印回控制台,以证明确实已经成功更改了像素的颜色。

借用numpy的数组切片功能访问部分图像(矩形):

corner = image[0:100, 0:100]
cv2.imshow("Corner", corner)

image[0:100, 0:100] = (0, 255, 0)

cv2.imshow("Updated", image)
cv2.waitKey(0)

四个索引:

  1. 起始y:第一个值是起始y坐标。

    这是我们的数组切片将沿y轴开始的位置。在上面的示例中,我们的分片从y = 0开始。

  2. 终点 y:就像我们提供了y的开始值一样,我们也必须提供y的结束值。当y = 100时,我们的切片沿y轴停止。

  3. 起始x:我们必须提供的第三个值是切片的起始x坐标。为了获取图像的左上角区域,我们从x = 0开始。

  4. 终点x:最后,我们需要提供x轴值以使切片停止。当x = 100时我们停止。

提取目标区域后 通过调用corner显示裁剪结果。之后的代码是修改区域颜色数值设置为(0, 255, 0) 绿色。

结果输出:

Pixel at (0, 0) - Red: 127, Green: 223, Blue: 17 
Pixel at (0, 0) - Red: 255, Green: 0, Blue: 0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值