【问题标题】:How to swap rows of a uint8 array?如何交换 uint8 数组的行?
【发布时间】:2019-05-15 16:06:30
【问题描述】:

在应用像素标记后,我一直致力于为我的 50 个图像文件制作数据。我得到的输出是这样的 [256*256] 在 Matlab 命令窗口中从 0,0 开始。但我想要的是我首先得到 256 行,然后向后,256、255、254、...、1。像这样:

之后我想得到

[xmin, ymin, xmax, ymax]

regionprops 给了我们[left top width height],但我想把它改成[xmin, ymin, xmax, ymax]

我怎样才能完成这两个任务?

【问题讨论】:

    标签: matlab image-processing matrix


    【解决方案1】:

    如果要将图像倒置,将底行放在顶部,请使用flipud

    flipped_img = flipud(img);
    

    如果要将图像旋转 90 度,将左列移动到底行,将底行移动到右列,则使用rot90

    rotated_img = rot90(img);
    

    数组p = [left top width height]可以通过简单的算术转换为数组t = [xmin, ymin, xmax, ymax]。我们采取xmin = leftymin = topxmax = xmin + width - 1ymax = ymin + height - 1

    t = [p(1:2), p(1:2)+p(3:4)-1];
    

    【讨论】:

    • 谢谢。你的解释是正确的,我已经弄清楚了。再次感谢您的参与
    【解决方案2】:

    我不确定这是否正是您正在寻找的,但您可能想要使用函数imrotate

    J = imrotate(I',90) %Rotates your image 90 degrees counterclockwise
    

    【讨论】:

    • imrotate 允许任意旋转角度(并且需要图像处理工具箱),但是为了操作的简单目的是将矩阵旋转90度增量,rot90 应该足够而且可能更快。
    • 感谢@pablo 和#Hoki 的及时回复。我已经在使用旋转命令,但问题是我想为我的文件获取最小最大坐标。简单地旋转不能​​解决问题,因为它仍然没有给我想要的东西。我希望有人以前做过一些最小最大任务。
    • 那么我必须说我不明白这个问题。我发布的内容只是在中间水平线上反映了您的图像。换索引很简单[xmin, ymin, xmax, ymax] = [left top left+width top+height]
    • 我尝试的最后一个并且它起作用了。除了那个旋转命令之外,它以某种方式影响了我的掩码值。谢谢楼主
    猜你喜欢
    • 2012-01-08
    • 1970-01-01
    • 2020-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2014-09-06
    • 1970-01-01
    相关资源
    最近更新 更多