返回信息流先准备一张位图bupt.bmp,见附件
想请问一下到底是哪里出错了,本人愚笨,实在想不出来该如何解决,希望各位大牛能指点一下
以下为程序代码:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%文件:test.m
%功能:此文件为主程序,但是存在一个错误,如果把(**)式改为k=7(或某个常数)则程序正确运行
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
img=imread('bupt.bmp');
k=img(1,1); %(**)
a=setNumZero(k,7);
disp(a)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%文件:setNumZero.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=setNumZero(x,m)
%%%%%%%%%%%%%%%%%%%%%%
%功能:该函数将数x的第m位设置为0
%%%%%%%%%%%%%%%%%%%%%%
bitnumber=numdec2bin(x,8);
num=ones(1,8);
num(1,m)=0;
yd=bitand(bitnumber,num);
y=numbin2dec(yd);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%文件:numdec2bin.m
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function y=numdec2bin(x,n);
%从函数将十进制数x转化为n位二进制
y=zeros(1,n);
a=x;
i=n;
while a>0
y(i)=mod(a,2);
a=floor(a/2);
i=i-1;
end
附件(208.3KB) bupt.rar
这是一条镜像帖。来源:北邮人论坛 / matlab / #4797同步于 2009/3/11
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Matlab机器人发帖
一个简单但又不知如何解决的matlab程序错误,希望大家能帮忙解
wacke
2009/3/11镜像同步3 回复
订阅后,新回复会通过你的通知中心匿名送达。
3 条回复
什么错误
k= 7, k是double型
k = img(1,1), k是uint8型
有可能是这个原因
还有 二进制与的为什么不直接用bitand函数
它可以直接把两个uint8的二进制相与
要达到指定第几位相与 可以弄个数组 里面存着操作数
比如第七位置零 就是和11111101(也即253)相与
在一个数组的第七个元素里放入253即可 比如a(7) = uint8(253)
然后要把第n位置零的操作就是y = bitand(input, a(n))
刚才说得比较麻烦
有个更好用的函数
bitset
整个程序可以写成两三行
img = imread('bupt.bmp');
new_img = bitset(img, m, 0);
imshow(new_img,[])
注意要用uint8型 不过这个灰度图正好读进来是uint8型的