如何使用openCV和Python填充每个矩形块中的颜色?

时间:2016-11-19 09:49:13

标签: python opencv maze

我想在下面的图像的每个单元格中填充颜色。我已经使用了循环来逐个像素地填充这些框。当使用填充边框也会变色是这里的主要问题。

这些是细胞的维度。

宽度:20px;

高度:20px;

边框宽度:20px;

当相邻小区连接时,它们的边界宽度将为4像素。

Original

Colored

所以我不想对边框进行着色,只有细胞区域(白色部分)才会被着色。

1 个答案:

答案 0 :(得分:0)

图像有三个通道(R,G,B)。

图像中的所有白色块都是白色的,因为它们在所有三个通道中都有255像素。

要将白色块转换为红色,首先我们使用cv2读取图像矩阵,然后在通道1(" G")和通道2(" B&)中读取值为255的所有像素#34;)将被更改为0.因此,现在我们在通道0(" R")中只有像素值255。这样,所有白色图像块都会变为红色块。

附上两个文件:1。old_square.jpg 2. new_square.jpg

old_square.jpg有白色方块,颜色为红色,如new_square.jpg所示。

检查以下脚本:

# libraries
import cv2
import numpy as np
import Image

# name of jpg image file
jpg_image_name = "old_square.jpg"

# reading jpg image and getting its matrix
jpg_image = cv2.imread(jpg_image_name)
jpg_image_mat = np.array(jpg_image)

# getting image features
pixel_value_to_replace = 255
rows, cols, channels = jpg_image_mat.shape

"""##########################################
An image have three channels (R, G, B). So,
putting 0 in other two channels to make image
red at white squares.
##########################################"""

# changing 255 to 0 in first channel
for i in range(rows):
    for j in range(cols):
        if(jpg_image_mat[i, j, 1] == pixel_value_to_replace):
            jpg_image_mat[i, j, 1] = 0

# changing 255 to 0 in second channel
for i in range(rows):
    for j in range(cols):
        if(jpg_image_mat[i, j, 2] == pixel_value_to_replace):
            jpg_image_mat[i, j, 2] = 0

# saving new modified matrix in image format
new_image = Image.fromarray(jpg_image_mat)
new_image.save("new_square.jpg")

old_square.jpg

new_square.jpg