Image 使用条件和循环(MATLAB)将多个图像粘贴到较大的图像中
我构建了一个二进制棋盘(制表符): 现在我必须放进几块(典当),就像这样: p_1和p_2的尺寸与棋盘的每个块(301x301 px)相同 如下所示: p_1: p_2: 在另一个练习中,我必须反转第2行的图像,这样做:Image 使用条件和循环(MATLAB)将多个图像粘贴到较大的图像中,image,algorithm,matlab,image-processing,for-loop,Image,Algorithm,Matlab,Image Processing,For Loop,我构建了一个二进制棋盘(制表符): 现在我必须放进几块(典当),就像这样: p_1和p_2的尺寸与棋盘的每个块(301x301 px)相同 如下所示: p_1: p_2: 在另一个练习中,我必须反转第2行的图像,这样做: P1_neg=double(P_1)*-1+255; P2_neg=double(P_2)*-1+255; 我获得以下图像: P1_neg: P2_neg 在第二行,我必须粘贴两种棋子:黑色背景的黑色棋子(p_1),和白色背景的黑色棋子(p_2) 棋盘的每一块都有
P1_neg=double(P_1)*-1+255;
P2_neg=double(P_2)*-1+255;
我获得以下图像:
P1_neg:
P2_neg
在第二行,我必须粘贴两种棋子:黑色背景的黑色棋子(p_1
),和白色背景的黑色棋子(p_2
)
棋盘的每一块都有301x301像素,每一块都有相同的尺寸。我只能使用条件和循环,但我不知道如何将这些片段粘贴到那里
因此,我知道第二行:当行(I)为偶数,列(j)为奇数时,我必须粘贴p_1
;当行是偶数,列也是偶数时,我必须粘贴P_2
我的代码,是下面的一个,希望你能帮我:)
我无法以原始分辨率上传棋盘,但这里是我使用的代码
tab=zeros(2408);
for i=0:7
for j=0:7
if mod(i,2)~=0 && mod(j,2)~=0
for avanza_fila=(i*301)+1:(i+1)*301
for avanza_columna= (j*301)+1:(j+1)*301
tab(avanza_fila,avanza_columna)=255;
end
end
elseif mod(i,2)==0 && mod(j,2)==0
for avanza_fila=(i*301)+1:(i+1)*301
for avanza_columna= (j*301)+1:(j+1)*301
tab(avanza_fila,avanza_columna)=255;
end
end
end
end
end
figure, imshow(tab)
这是我解决你问题的办法。我个人会避免
循环,但你说你的作业需要它。我已经创建了一个高分辨率版本的董事会,您可以在这里获得:
这个棋盘是2408 x 2408,因为每个棋子是301 x 301,在一个8 x 8的网格上。你的逻辑几乎是正确的。你只需要弄清楚如何准确地把瓷砖放在黑板上。我编写了两个for
循环,其中第一个for
循环使用第2行和第7行,第二个for
循环通过第1列到第8列。对于第二行或第七行,我们检查列是偶数还是奇数,并将正确的棋子放置在相应的块中。我还将电路板和图像转换为黑白,以消除任何量化瑕疵,正如我在您发布的图像中看到的那样。此外,我已将您的图像重命名为您在帖子中的名称,因此您可以根据自己编写的代码更改相关名称。我还制作了一份代码板的副本,因此我们不想修改名为boardCopy
的原始板。此副本将包含放置在棋盘中的棋子。不用多说,下面是代码:
board = imread('boardHigh.png'); %// High-res board
P_1 = im2bw(imread('P_1.png')); %// Load in the pawn pieces
P_2 = im2bw(imread('P_2.png'));
P1_neg = im2bw(imread('P1_neg.png'));
P2_neg = im2bw(imread('P2_neg.png'));
boardCopy = board; %// Make a copy of the board
for row = [2 7]
for col = 1 : 8
if row == 2
if mod(col,2) ~= 0
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_2;
else
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_1;
end
else
if mod(col,2) ~= 0
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P1_neg;
else
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P2_neg;
end
end
end
end
figure;
imshow(boardCopy);
这是我用棋子得到的棋盘:
希望这对你有帮助,祝你好运 实际上,你有四种可能的图像。白底黑兵、黑底黑兵、白底白兵、黑底白兵。但是,可以通过反转前两个图像(假设为黑白)来获得最后两个图像。你能给我们看一下当兵的照片吗?一旦我们有了这些,就很容易把它放到你的棋盘上。你只要给我更多!另外,请把链接贴到你原来的棋盘上。你在链接中显示的是缩小尺寸的图片。我无法上传图片,但我将用于构建它的代码放在dropbox上或上传到那里。[url]=
board = imread('boardHigh.png'); %// High-res board
P_1 = im2bw(imread('P_1.png')); %// Load in the pawn pieces
P_2 = im2bw(imread('P_2.png'));
P1_neg = im2bw(imread('P1_neg.png'));
P2_neg = im2bw(imread('P2_neg.png'));
boardCopy = board; %// Make a copy of the board
for row = [2 7]
for col = 1 : 8
if row == 2
if mod(col,2) ~= 0
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_2;
else
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P_1;
end
else
if mod(col,2) ~= 0
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P1_neg;
else
boardCopy((row-1)*301 + 1 : row*301, (col-1)*301 + 1 : col*301) = P2_neg;
end
end
end
end
figure;
imshow(boardCopy);