OpenCV像素处理基本操作 Open_CV系列(二)

文章目录

  • 1. 提取指定位置的像素RGB值(BGR)
  • 2. 修改指定像素的BGR值
    • 2.1 修改一个像素
    • 2.2 修改一个区域的像素
  • 3. 图像的创建
    • 3.1 创建纯黑/白图像
    • 3.2 创建黑白相间图像
    • 3.3 创建彩色图像
    • 3.4 随机颜色图像(雪花点图)
  • 4. 图像的拼接
    • 水平拼接 hstack()
    • 垂直拼接 vstack()


ʚʕ̯•͡˔•̯᷅ʔɞ
欢迎各路大佬来到小啾主页指点☀️欢迎大家前来学习OpenCV像素处理基本操作 - Open_CV系列博文,我是侯小啾。
博客主页:云雀编程小窝 ꧔ꦿ
꧔ꦿ博文如有帮助,还请给个点赞 + 关注 + 收藏
            请添加图片描述

上期传送门:OpenCV图像处理基本操作 Open_CV系列(一)

如果您的numpy数组基础不足,可参考这篇超详细的blog总结:Numpy库速通教程典藏版 #一篇就够了系列

如有疑问欢迎随时在评论区交流。☀️


正文开始!

首先准备一张图片,用于代码的示例,
这里我选择使用这只cat图(忽略这个去不掉的水印):
      OpenCV像素处理基本操作 Open_CV系列(二)_第1张图片


1. 提取指定位置的像素RGB值(BGR)

import cv2

image = cv2.imread("pic.jpg")
print(image.shape) # 先查看一下shape
px = image[300, 456] # 以提取(300,456)位置像素的RGB值为例,其中300指图片的垂直方向,456指水平方向
print(px)

            OpenCV像素处理基本操作 Open_CV系列(二)_第2张图片

[39 25 37] 表示红绿蓝三种不同的颜色(是光学三原色,不是我们小学美术课学的颜料三原色红黄蓝)
光学三原色是人眼能够感知的三种颜色,这三种颜色也称三基色,将这三种颜色以不同比例匹配,就可以得到其他不同的颜色。计算机利用色彩空间 对颜色进行编码。
RGB色彩空间即彩色,存在三个色彩通道:R通道,G通道,B通道,即对应这里的[39 25 37]三个数字。且每个通道的色彩值都在区间[0, 255]内。

RGB色彩空间的色彩通道在OpenCV中的顺序不是RGB,而是BGR色彩空间(顺序相反)。即R为37,G为25,B为39。

  • 对于BGR色彩空间的图像,当每个像素的BGR三个值相等时,就可以得到灰度图像。
  • B、G、R三个值都为0时表示纯黑色
  • B、G、R三个值都为255时表示纯白色

        OpenCV像素处理基本操作 Open_CV系列(二)_第3张图片
逐个打印出:

import cv2

image = cv2.imread("pic.jpg")
print("R:", image[300, 456, -1])
print("G:", image[300, 456, 1])
print("B:", image[300, 456, 0])

            OpenCV像素处理基本操作 Open_CV系列(二)_第4张图片


2. 修改指定像素的BGR值

提取到BGR值之后,可以对其进行修改操作。

2.1 修改一个像素

import cv2

image = cv2.imread("pic.jpg")

image[291, 218] = [255, 255, 255]
cv2.imshow("cat", image)
cv2.waitKey()
cv2.destroyAllWindows()

这里将图片截取一部分查看,可以看到这里图中圈出的地方,多了一个白色的点。即为我们修改的结果。
                OpenCV像素处理基本操作 Open_CV系列(二)_第5张图片


2.2 修改一个区域的像素

以竖直方向上[100,150]范围的像素块,水平方向上[200,251]范围的像素块为例。将其BGR值都修改为白色。

从程序执行效果可以看出,竖直方向,像素的位置是从上往下排的,水平方向上,像素的位置在从左往右排列的。即零轴在左上角。(pic的shape为(700,700,3),修改的白块儿在偏左上角的位置。)

import cv2

image = cv2.imread("pic.jpg")
cv2.imshow("cat", image)
for i in range(100, 151):
    for j in range(200, 251):
        image[i, j] = [255, 255, 255]
cv2.imshow("cat", image)
cv2.waitKey()
cv2.destroyAllWindows()

程序执行结果如图所示:
      OpenCV像素处理基本操作 Open_CV系列(二)_第6张图片


3. 图像的创建

创建图像,即创建三维数组或二维数组,使其像素的每个色彩值分布在[0,255]内。然后使用Open_CV的方法将其显示出来即可。


3.1 创建纯黑/白图像

创建纯黑图像,即创建二维的全零数组。

import cv2
import numpy as np

width = 800
height = 600
img = np.zeros((height, width), np.uint8)
cv2.imshow("BLACK", img)
cv2.waitKey()
cv2.destroyAllWindows()

   OpenCV像素处理基本操作 Open_CV系列(二)_第7张图片


同理创建纯白图像即在上边的基础上把数组的每个值都改为255.

代码示例:

import cv2
import numpy as np

width = 800
height = 600
img = np.ones((height, width), np.uint8) * 255
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

   OpenCV像素处理基本操作 Open_CV系列(二)_第8张图片


3.2 创建黑白相间图像

  • 将全零数组的局部值改为255即可。

全黑+白块

import cv2
import numpy as np

width = 400
height = 300
img = np.zeros((height, width), np.uint8)
img[50:101, 50:100] = 255
cv2.imshow("BLACK-WHITE", img)
cv2.waitKey()
cv2.destroyAllWindows()

              OpenCV像素处理基本操作 Open_CV系列(二)_第9张图片


黑条白条相间

import cv2
import numpy as np

width = 440
height = 300
img = np.zeros((height, width), np.uint8)
# 在水平方向上,每隔40个单位的像素,是20个单位长度的白色像素的起始点。
# 即40是一个黑白色的周期,每次的黑白在水平方向上都显示20个像素的长度。
for i in range(0, width, 40):
    img[:, i:i + 20] = 255
cv2.imshow("BLACK-WHITE", img)
cv2.waitKey()
cv2.destroyAllWindows()

              OpenCV像素处理基本操作 Open_CV系列(二)_第10张图片


3.3 创建彩色图像

关于色素,
显示红色即R值为255,G值与B值为0
显示绿色即G值为255,R值与B值为0
显示蓝色即B值为255,R值与G值为0

接下来依次创建这三种彩色图像:

import cv2
import numpy as np

width = 300
height = 200
img = np.zeros((height, width, 3), np.uint8)
blue = img.copy()
blue[:, :, 0] = 255
green = img.copy()
green[:, :, 1] = 255
red = img.copy()
red[:, :, 2] = 255
cv2.imshow("blue", blue)
cv2.imshow("green", green)
cv2.imshow("red", red)
cv2.waitKey()
cv2.destroyAllWindows()

程序执行结果如下,依次创建了红绿蓝三种颜色的图像:

    OpenCV像素处理基本操作 Open_CV系列(二)_第11张图片


3.4 随机颜色图像(雪花点图)

创建随机灰度图像

import cv2
import numpy as np

width = 400
height = 300
img = np.random.randint(256, size=(height, width), dtype=np.uint8)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

程序执行结果如下:
              OpenCV像素处理基本操作 Open_CV系列(二)_第12张图片


创建随机彩色图像

import cv2
import numpy as np

width = 400
height = 300
img = np.random.randint(256, size=(height, width, 3), dtype=np.uint8)
cv2.imshow("img", img)
cv2.waitKey()
cv2.destroyAllWindows()

程序执行结果如下:
              OpenCV像素处理基本操作 Open_CV系列(二)_第13张图片


4. 图像的拼接

首先准备两个图片,这里将其命名为a,b。
OpenCV像素处理基本操作 Open_CV系列(二)_第14张图片


水平拼接 hstack()

import cv2
import numpy as np

img1 = cv2.imread("a.jpg")
img2 = cv2.imread("b.jpg")
img_h = np.hstack((img1, img2))
cv2.imshow("img_h", img_h)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV像素处理基本操作 Open_CV系列(二)_第15张图片


垂直拼接 vstack()

import cv2
import numpy as np

img1 = cv2.imread("a.jpg")
img2 = cv2.imread("b.jpg")

img_v = np.vstack((img1, img2))
cv2.imshow("img_v", img_v)
cv2.waitKey()
cv2.destroyAllWindows()

OpenCV像素处理基本操作 Open_CV系列(二)_第16张图片
(因为图片过长,图片未显示全)


你可能感兴趣的:(python,opencv,计算机视觉,numpy数组,图像处理)