2 用python进行OpenCV实战之图像基本知识

前言

在这一节,我们将学习图像的基本构成单元——像素,我们将详细的探讨什么是像素?像素是如何使用来构成图像的?然后学习如何通过OpenCV来获取和操纵像素。

1 什么是像素

所有的图像都包含一组像素,像素是图像的原始构建块。 没有比像素更细的单位了。
通常,我们将像素认为是在我们的图像给定位置出现的光的颜色或者强度,如果我们将图像考虑成一个网格,在网格中的每个方块都包含一个单一的像素。例如,我们假设有一个分辨率是500300的图像,这就意味着我们的图像被分成一个关于像素的网格,这个网格有500个行,300个列,综上可知,总共有500300=150000个像素在这张图片中。
像素主要有两种表达形式:灰度模式和彩色模式。在一张灰度图片中,每个像素有一个从0至255{[0,255]}的值,其中0表示“纯黑色”,255表示“纯白色”,在0和255之间的值变现成不同深浅的灰色,当值靠近0时,图像更暗,当值靠近255时,图像更亮。
彩色模式的图片通常用RGB颜色空间来表示(R for red, G for green, B for blue),还有一些其他的模式比如CMY,但是在这里我们先不讨论。
我们以(red, green, blue)的形式来表示RGB元组,这个元组就表示了我们的颜色,其中这三种颜色的值用在[0,255]之间的整数值表示,所以我们通常用unsigned int类型来表示每个颜色的强度。
为了构成白色,我们需要用(255, 255, 255)来表示,为了得到黑色,我们需要用(0, 0, 0)来表示,红(255, 0, 0),绿(0, 255, 0),蓝(0, 0, 255).
RGB配色表

色光三原色

2 图像坐标系概述

正如我们之前所提到的,我们将一张图片以像素网格的形式表示,我们想象一下假设我们的图片为一张图表纸,图像的左上角为原点。


图像坐标系

3 获取和操纵像素

上一节中,我们从磁盘中读取了图片,然后将它转换了格式再存储到了磁盘中,在这一节我们将对如何获取和操纵图像的像素进行实战,建立

getting_and_setting.py

3.1 代码

from __future__ import print_function #1
import argparse #2
import cv2 #3

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

image = cv2.imread(args["image"]) #7
cv2.imshow("Original", image) #8
 
(b, g, r) = image[0, 0] #9
print("Pixel at (0, 0) - Red: {}, Green: {}, Blue: {}".format(r, g, b)) #10

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

corner = image[0:200, 0:100] #14
cv2.imshow("corner1", corner) #15

image[0:200, 0:100] = (0, 255, 0) #16
cv2.imshow("update", image) #17
cv2.waitKey(0) #18

3.2 代码详细解释

#1-6:
关于这段代码在第一节中已经进行过详细解释了,主要是为了导包,命令行参数的处理

#7-8:
展示原始图片

#9:
在第一节中,就曾经提到过OpenCV是用NumPy数组来表示图像的,我们也可以将这种表示看成是一种矩阵表示,为了获取像素,我们需要应用我们所感兴趣的x,y坐标,从中我们可以得到一个表示(r,g,b)的元组,然而,我们需要注意的是:在OpenCV中是以逆序存储RGB通道到的,即我们通常以red,green,blue的顺序来记忆,但是OpenCV则是以blue,green,red的顺序来储存的.

(b, g, r) = image[0, 0]

通过获得图像(0,0)处的像素,并将它赋值给一个三元组,我们可以再次看出OpenCV以逆序存取RGB像素,所以当我们在元组中得到每个元素时候,我们需要以BGR的顺序来获取

#10:
输出RGB每个通道的值到终端。可以看出我们获取像素值的方法非常简单,而这一切都要归功于NumPy,它替我们做了一系列的复杂工作。

#11:
我们操纵在左上角的像素,即在(0,0)处的像素,我们给他赋值(0,0,255),如果我们将它以RGB的格式来读的话,我们认为:red值是0,green值是0,blue值是255,所以我们将得到纯蓝色。然而,正如我们之前所提到的OpenCV是以BGR的格式存储像素的而不是RGB格式,所以我们实际上得到的是:red值是255,green值是0,blue值是0,因此我们得到的是一个纯红色而不是纯蓝色。

#12,13:
通过得到在(0,0)像素点的BGR颜色值,然后将它们以RGB的形式输出

#14
获取以及操纵单一的像素点是相当简单的,那如果使用NumPy的数组分割能力得到图像的一块长方形区域呢?

corner = image[0:200, 0:100] #14

在第一节我们介绍过image的数组里的第一个参数是高即y,第二个参数是宽即x,所以corner将得到一个100*200大小的长方形区域,而这个区域即为图像的左上角区域。

#15:
将corner以“Corner”的名称显示出来

#16:
将左上角的区域用(0,255,0)即绿色来表示,实现了改变一整块区域的像素值的目的。

#17:
以“Updated”的名称显示图像

#18:
cv2.waitKey()表示暂停脚本的执行直到在键盘输入一个按键,用“0”作为参数表示可以使用任何按键作为继续脚本执行的按钮。

效果展示

显示效果

转载请注明出处:
CSDN:楼上小宇__home:http://http://blog.csdn.net/sty945
简书:楼上小宇:http://www.jianshu.com/u/1621b29625df

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,558评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,002评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,024评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,144评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,255评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,295评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,068评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,478评论 1 305
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,789评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,965评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,649评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,267评论 3 318
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,982评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,223评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,800评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,847评论 2 351

推荐阅读更多精彩内容