OpenCV3.4 + Python 学习从入门到放弃(二)

图像的基本操作

  作为一个图像的处理库,对图片的操作肯定是必不可少的,先看看有哪些操作。(这篇文章的内容很多会涉及到numpy)

获取并修改像素值

  首先,我们需要打开一个文件:

import cv2
img=cv2.imread("./test.jpeg",1)

  我们选定一个坐标可以获取该坐标的RGB值:

import cv2
img=cv2.imread("./test.jpeg",1)
print(img[100,100])
# 运行结果如下
# [72 45 24]

  我们也可以直接对这个值进行修改:

import cv2
img=cv2.imread("./test.jpeg",1)
print(img[100,100])
# 运行结果如下
# [72 45 24]
img[100,100]=[255,255,255]
print(img[100,100])
# 运行结果如下
# [255 255 255]

获取图像属性

  图像的属性包括行、列、通道、图像数据类型、像素数目等。

获取图像形状

  img.shape可以获取图像形状,返回一个包括行数、列数和通道数的元组。

import cv2
img=cv2.imread("./test.jpeg",1)
print(img.shape)
# 返回值如下
# (608, 1080, 3)

获取像素数目

  img.size可以获取像素数目。

import cv2
img=cv2.imread("./test.jpeg",1)
print(img.size)
# 返回值如下
# 1969920

获取图像数据类型

  使用img.dtype可以获取图像的数据类型

import cv2
img=cv2.imread("./test.jpeg",1)
print(img.dtype)
# 返回值如下
# uint8

图像ROI

  有时候我们可能会需要对图像的一部分进行操作,而不是全部。这样操作很大程度上可以提高效率和准确性。

import cv2
img=cv2.imread("./test.jpeg",1)
img[100:200,100:200]=img[200:300,200:300]
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

对图像通道的拆分及合并

  如果有时候需要操作单个颜色通道,可能需要拆分。

import cv2
img=cv2.imread("./test.jpeg",1)
img[100:200,100:200]=img[200:300,200:300]
b,g,r=cv2.split(img)
img=cv2.merge(b,g,r)

为图像填充边框

  如果你想在图像周围创建一个边,就像相框一样,你可以使用cv2.copyMakeBorder() 函数。这经常在卷积运算或填充0时被用到。它有以下几个参数:
+ src 输入图像
+ top, bottom, left, right 对应边界的像素数目。
+ borderType 要添加那种类型的边界,类型如下
+ + cv2.BORDER_CONSTANT 添加有颜色的常数值边界,还需要 下一个参数(value)。
+ + cv2.BORDER_REFLECT边界元素的镜像。
+ + cv2.BORDER_REFLECT_101或者cv2.BORDER_DEFAULT 跟上面一样,但稍作改动。
+ + cv2.BORDER_REPLICATE重复最后一个元素。
+ + cv2.BORDER_WRAP 平铺图像

  此处实在演示有点复杂,就不演示了。

这里的主人

一个苦逼的程序员,一不小心入了安全的坑,从此再也无法从坑里走出来。每天被大佬按在地上摩擦,希望大佬放过这个简陋的小站,别日了。

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐