Anonymous 发表于 2023-3-31 16:42:22

matlab如何在黑底图片中心上添加800*400个像素大小的红色矩形

matlab如何在黑底图片中心上添加800*400个像素大小的红色矩形

机器人Gpt 发表于 2023-3-31 16:44:06

可以采用以下步骤实现在黑底图片中心添加红色矩形:

1. 创建一个800*400的红色矩形


rect = uint8(zeros(400, 800, 3));
rect(:, :, 1) = 255; % 设置红色通道为最大值


2. 创建一个黑色背景图片


bg = uint8(zeros(800, 800, 3));


3. 将红色矩形放置在黑色背景图片的中心


x_start = 201;
y_start = 201;
bg(x_start:x_start+399, y_start:y_start+799, :) = rect;


4. 显示图片


imshow(bg);


完整代码如下:


% 创建红色矩形
rect = uint8(zeros(400, 800, 3));
rect(:, :, 1) = 255; % 设置红色通道为最大值

% 创建黑色背景图片
bg = uint8(zeros(800, 800, 3));

% 将红色矩形放置在黑色背景图片的中心
x_start = 201;
y_start = 201;
bg(x_start:x_start+399, y_start:y_start+799, :) = rect;

% 显示图片
imshow(bg);

--- 光学专家Gpt

Anonymous 发表于 2023-3-31 16:46:05

能解释下代码吗?

机器人Gpt 发表于 2023-3-31 16:47:01

当然可以,下面对每一句代码进行解释:


% 创建红色矩形
rect = uint8(zeros(400, 800, 3));
rect(:, :, 1) = 255; % 设置红色通道为最大值


这部分代码是创建一个800*400的红色矩形。`zeros(400, 800, 3)`表示创建一个像素值全为0,大小为400x800,通道数为3的三维矩阵,即RGB三个通道的像素值都为0。然后,将`rect`中所有像素的第1个通道(即红色通道)的像素值设为255,即设置颜色为红色。


% 创建黑色背景图片
bg = uint8(zeros(800, 800, 3));


这部分代码是创建一个黑色背景图片。与上面创建红色矩形不同的是,此处创建的是800x800大小的像素值全为0、RGB三个通道都为0的三维矩阵。


% 将红色矩形放置在黑色背景图片的中心
x_start = 201;
y_start = 201;
bg(x_start:x_start+399, y_start:y_start+799, :) = rect;


这部分代码是将红色矩形放置在黑色背景图片的中心。`x_start`和`y_start`分别表示红色矩形在黑色背景图片中的起始行和列。将红色矩形放置在`bg(x_start:x_start+399, y_start:y_start+799, :)`这个区域内即可。最后的`:`表示所有三个通道的像素值都要进行赋值。


% 显示图片
imshow(bg);


这部分代码是将创建好的图片显示出来,方便直观观察结果。
--- 光学专家Gpt

Anonymous 发表于 2023-3-31 16:53:03

用类似“FilledCircle”的函数会不会好点

机器人Gpt 发表于 2023-3-31 16:53:44

是的,使用类似“FilledCircle”的函数也可以实现在黑底图片中心添加800*400个像素大小的红色矩形。Matlab自带的Image Processing Toolbox中提供了许多处理图像的函数,其中就包括了画图函数。比如,可以使用`rectangle`函数绘制矩形,代码如下:
% 创建黑色背景图片
bg = uint8(zeros(800, 800, 3));

% 获取中心点坐标
x_center = size(bg, 2) / 2;
y_center = size(bg, 1) / 2;

% 绘制中心点为左上角的矩形
width = 800;
height = 400;
rect_x = x_center - width / 2;
rect_y = y_center - height / 2;
rectangle('Position', , 'FaceColor', 'r');

% 显示图片
imshow(bg);
上述代码中,“Position”参数是矩形的“左、下、宽度、高度”四个属性,因此用中心点和矩形的宽和高计算得到“左、下”两个坐标值。同时,通过“FaceColor”参数设置填充颜色为红色。这样就可以在黑色背景图片中心添加一个红色矩形。
--- 光学专家Gpt

Anonymous 发表于 2023-3-31 17:17:53

为什么我得到的矩形没有填充颜色clear;
clc;
row = 800;
col = 1700;
img = zeros(row,col,3,'uint8');
img(:,:,1)=uint8(0); %基底颜色
img(:,:,2)=uint8(0);
img(:,:,3)=uint8(0);
%circle?
% 创建一个黑底图片
% 获取图片中心坐标
%center = round(size(img)/2);
% 添加80个像素宽的白色圆点
img = insertShape(img, 'Rectangle', , 'Color',, 'Opacity', 1);
filename=['D:\matlab资料\图像处理GUI\','red','.jpg'];
imwrite(img,filename)

机器人Gpt 发表于 2023-3-31 17:18:41

你的代码中有一些错误,具体如下:

1. 插入矩形时,缺少矩形的位置和大小参数。需要使用一个4元素数组表示矩形的位置和大小。

2. “Color”参数用于设置矩形边框的颜色,而不是填充颜色。填充颜色需要使用“FillColor”参数进行设置。

3. 缺少矩形填充颜色的RGB值。需要使用一个元素为3的数组表示填充颜色的RGB值。

你可以尝试使用如下代码,添加一个800x400像素大小、填充颜色为红色的矩形到黑底图片中心:


clear;
clc;

row = 800;
col = 1700;

% 创建一个黑底图片
img = zeros(row, col, 3, 'uint8');
img(:, :, 1) = uint8(0); %基底颜色
img(:, :, 2) = uint8(0);
img(:, :, 3) = uint8(0);

% 获取图片中心坐标
center = round(size(img)/2);

% 添加800x400像素大小的红色矩形
width = 800;
height = 400;
pos_x = center(2) - width / 2;
pos_y = center(1) - height / 2;
fill_color = ; %填充颜色为红色
img = insertShape(img, 'FilledRectangle', , 'Color', fill_color, 'Opacity', 1);

% 保存图片
filename = 'result.png';
imwrite(img, filename);


希望能够帮助你解决问题。
--- 光学专家Gpt

Anonymous 发表于 2023-3-31 17:24:16

这个也无法填充颜色

机器人Gpt 发表于 2023-3-31 17:24:56

非常抱歉,我之前的回答有误。可以使用`rectangle`函数来画矩形并填充颜色。下面是一组新的代码,可以在黑底图片中心添加800*400个像素大小的红色矩形:clear; clc; row = 800; col = 1700; img = zeros(row, col, 3, 'uint8'); % 创建一个黑底图片 img(:,:,1) = uint8(0); %基底颜色 img(:,:,2) = uint8(0); img(:,:,3) = uint8(0); % 获取图片中心坐标 center = round(size(img)/2); % 添加800x400像素大小的红色矩形 width = 800; height = 400; pos_x = center(2) - width / 2; pos_y = center(1) - height / 2; fill_color = ; % 指定填充颜色为红色 rectangle('Position', , 'FaceColor', fill_color, 'EdgeColor', 'none'); % 在黑底图片中心添加红色矩形 % 保存图片 filename = 'result.png'; imwrite(img, filename);希望这次回答能够帮到你,如有任何问题请随时提出。
--- 光学专家Gpt
页: [1] 2 3 4 5
查看完整版本: matlab如何在黑底图片中心上添加800*400个像素大小的红色矩形