Matlab报错‘Size inputs must be integers’:创建同尺寸矩阵求助
解决MATLAB中
ones()尺寸非整数的报错问题 嘿,我来帮你搞定这个报错~
首先咱们先搞清楚报错的根源:你的img2宽度是235,当你写size(img2,2)/2时得到的是117.5,这不是整数,而MATLAB的ones()和zeros()函数要求传入的尺寸参数必须是正整数,所以就触发了这个错误:
Error using ones Size inputs must be integers
而且你的原代码逻辑其实会生成一个比img2更宽的矩阵(235+117.5列),这和你想要创建与img2同尺寸矩阵的需求不符,咱们得调整一下写法。
下面给你两种实用的解决方案:
方法一:用取整函数适配任意尺寸的图像
如果想把矩阵分成左右两部分,左边为0、右边为1,且总尺寸和img2完全一致,可以用取整函数来计算分割的列数:
若希望右边的1部分列数更少(下取整):
half_col = floor(size(img2,2)/2); % 针对235的宽度,得到117 r = [zeros(size(img2,1), size(img2,2)-half_col), ones(size(img2,1), half_col)];这样左边是118列0,右边是117列1,总宽度刚好235,和
img2一致。若希望右边的1部分列数更多(上取整):
half_col = ceil(size(img2,2)/2); % 针对235的宽度,得到118 r = [zeros(size(img2,1), size(img2,2)-half_col), ones(size(img2,1), half_col)];这种情况下左边117列0,右边118列1,总宽度同样是235。
方法二:手动指定整数尺寸(适合固定尺寸的图像)
因为你已经明确知道img2的尺寸是[111 235],也可以直接写死整数参数,这样更直观:
r = [zeros(111, 118), ones(111, 117)];
不过这种方法的缺点是如果后续img2的尺寸发生变化,你得手动修改数字,灵活性不如第一种方法。
内容的提问来源于stack exchange,提问作者Youbaa Baba




