主题:急需求解图像问题
lh985000
[专家分:0] 发布于 2008-09-16 11:45:00
请问用matlab怎样截取图像呢?我是这样写的
im=f(x1:x2,y1:y2);
figure,imshow(im);
它却显示Warning:Integer operands are required for colon operator when used as index
并且没有图像显示,只有一张白板。
应该怎么改呢?多谢了。
回复列表 (共3个回复)
沙发
永恒的回忆 [专家分:810] 发布于 2008-09-16 20:49:00
问题可能是出在你的im矩阵是double型,而imshow需要uint8型矩阵,你把im转换下就行了
im=uint8(im);
imshow(im);
问题就解决了
板凳
lh985000 [专家分:0] 发布于 2008-09-17 19:54:00
我的原程序是这样的:
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 楼
永恒的回忆 [专家分:810] 发布于 2008-09-18 19:48:00
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);
我来回复