回 帖 发 新 帖 刷新版面

主题:急需求解图像问题

请问用matlab怎样截取图像呢?我是这样写的
im=f(x1:x2,y1:y2);
figure,imshow(im);
它却显示Warning:Integer operands are required for colon operator when used as index
并且没有图像显示,只有一张白板。
应该怎么改呢?多谢了。

回复列表 (共3个回复)

沙发

问题可能是出在你的im矩阵是double型,而imshow需要uint8型矩阵,你把im转换下就行了
im=uint8(im);
imshow(im);
问题就解决了

板凳


我的原程序是这样的:
function [cut_im,cut_G]=cut_face(im)
G=rgb2gray(im);
figure;
imshow(G);
G=double(G);
dis=ginput(2);
D=dis(2,1)-dis(1,1);
x1=dis(1,2)-0.5*D;
x2=dis(2,2)+2.5*D;
y1=dis(1,1)-0.8*D;
y2=dis(2,1)+0.8*D;
cut_im=im(x1:x2,y1:y2);
cut_G=G(x1:x2,y1:y2);
cut_im=uint8(cut_im);
figure;
imshow(cut_im);
第六行的错误是Warning: Integer operands are required for colon operator when used as index
第十二行的错误是 Subscript indices must either be real positive integers or logicals.
请问应怎么改啊?多谢了。

3 楼

Warning: Integer operands are required for colon operator when used as index
这个错误主要是你颠倒了横竖坐标,和在坐标后加上什么0.5*D之类的东西(我没看懂这个D与剪切有什么关系),且没加图片边缘检测

Subscript indices must either be real positive integers or logicals
这个错误主要是你原来搞个什么0.8*D,弄得数组索引不是整数

下面是我改后的完整程序,加了边缘检测,你可以随意点firgure窗口任意一点剪切,都不会出错(超出相片部分,默认从相片边缘开始剪切)

function [cut_im,cut_G]=cut_face(im)
G=rgb2gray(im);
[m n l] = size(im);
figure;
imshow(G);
dis=ginput(2);
dis(dis<0)=0;
dis(logical(dis(:,1)>n),1)=n;
dis(logical(dis(:,2)>m),2)=m;
x1=min(dis(:,1));    
x2=max(dis(:,1));     
y1=min(dis(:,2));     
y2=max(dis(:,2));     
cut_G=G(y1+1:y2,x1+1:x2);
cut_im=G(y1+1:y2,x1+1:x2,:);
figure;
imshow(cut_G);

我来回复

您尚未登录,请登录后再回复。点此登录或注册