我看了您的案例,然后我照做,但为什么我的结果总是“逻辑索引包含一个超出数组范围的 true 值”,我想把前一张图变成后一张图。下面是代码,请您帮忙看看,谢谢您了。
你好,同学,请顺便把你看的博文连接发过来一下,我给你找找错误
已经看了博文,发现运行一点问题都没有,非常丝滑!!!~~~
我把imagepath和subimgpath都设置为同一张图片,没有任何问题,只要图片在当前工作路径里
imagepath = '20190903221520229.jpg'; %待处理图片
subimgpath = '20190903221520229.jpg'; %可以选择填充子图
sz =3; %设置块的大小
thresh = 125/255; %灰度阈值
blackthresh = 0.6; %小格子黑色大于这个值小格子为黑
hasline = 1; %设置分割线条为1 其他值为没有
linecolor = 0; %设置分割线条颜色
pixpath = 'a.txt'; %设置最后像素矩阵的路径
A=imread(imagepath); %读取到一张图片
B = imread(subimgpath); %小块换成图片也可
%figure();%图片太大截图
%A=A(1:360,600:961);
%imshow(I2)
B = rgb2gray(B);
IB=imresize(B,[sz+1,sz+1]);
%thresh = graythresh(A); %自动确定二值化阈值
I2 = im2bw(A,thresh); %对图像二值化
I2=imresize(I2,[600,600]);%太大的图像需要缩小
figure();
imshow(A); %显示二值化之前的图片
title('原图');
imshow(I2); %显示二值化之后的图片
title('二值化');
%I2=1*ones(16)
I2 = uint8(I2);
rs = size(I2, 1); cs = size(I2, 2);%取图像的行列数
ch = sz; cw = sz;
numr = rs/sz;
numc = cs/sz;
tagm = zeros(numr,numc);
t1 = (0:numr-1)*ch+1 ;
t3 = (0:numc-1)*cw+1;
figure;
for i = 1 : numr-1
for j = 1 : numc-1
if hasline == 1
I2(t1(i),:,:)=linecolor; %设置分割线条
I2(:,t3(j),:)=linecolor;
end
if sum(sum(I2(t1(i)+1:t1(i)+sz,t3(j)+1:t3(j)+sz)==0))/(sz*sz)>blackthresh
I2(t1(i):t1(i)+sz,t3(j):t3(j)+sz)=0;
tagm(i,j)=1;
else
I2(t1(i):t1(i)+sz,t3(j):t3(j)+sz)=255;
tagm(i,j)=0;
end
end
end
imshow(I2);
fid=fopen(pixpath,'wt');%改为你自己文件的位置
[m,n]=size(tagm);
for i=1:m
for j=1:n
if j==n
fprintf(fid,'%g\n',tagm(i,j));
else
fprintf(fid,'%g\t',tagm(i,j));
end
end
end
fclose(fid);
建议私信博主,这里是全局提问,不针对个人
https://blog.csdn.net/weixin_38470243/article/details/100527276#comments_13518690