我想在下面的图像的每个单元格中填充颜色。我已经使用了循环来逐个像素地填充这些框。当使用填充边框也会变色是这里的主要问题。
这些是细胞的维度。
宽度:20px;
高度:20px;
边框宽度:20px;
当相邻小区连接时,它们的边界宽度将为4像素。
所以我不想对边框进行着色,只有细胞区域(白色部分)才会被着色。
答案 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")