【问题标题】:How can i rotate an image on matlab without getting the black background如何在matlab上旋转图像而不会得到黑色背景
【发布时间】:2019-04-21 12:32:39
【问题描述】:

检查https://www.mathworks.com/help/matlab/matlab_prog/run-sections-of-programs.html 我可以使用 imrotate 但我会得到一个黑色背景的图像,如下所示:

我想要一个更像这样的图像:

基本上,我不想添加任何黑色或白色像素或任何像素,我只想让我的图像在没有任何额外背景的情况下旋转。

请注意,当我在 matlab 上显示第二张图像时,它也显示为黑色背景和一堆 0 像素

【问题讨论】:

  • 我认为您混淆了图像本身和显示它的窗口(或框架)。在我看来,您的第二张图片看起来像是填充了白色像素以适合显示的矩形框架,而不是您的第一张图片中的黑色像素。但是您的问题似乎表明这不是您想要的。你的意思是你想要某种图像文件,它为第一行存储一个像素,为第二行存储 3 个像素,为第三行存储 5 个像素, etc ?祝你好运。
  • 使黑色区域(背景)透明......这是唯一的方法。正如 Mark 刚刚解释的那样,图像数据将始终是一个矩形区域,您的工作是按照您想要的方式显示(或不显示)每个像素。
  • 如果是要旋转的显示图像,照常显示,获取image图形对象的句柄,然后调用rotate。跨度>

标签: matlab image-processing


【解决方案1】:

我认为你可以使用

J = imrotate(I,angle,method,'loose')

将完整图像保存在 J 中(包含边界处的 0 像素)。 然后使用 rgb2ind (https://it.mathworks.com/help/matlab/ref/rgb2ind.html) 或 bwconncomp (https://www.mathworks.com/help/images/ref/bwconncomp.html) 您可以识别包含图像的连接组件(应该有 4 个):通过这种方式您可以将这些像素的颜色更改为白色 为了避免有 4 个组件,您可以先自己添加一个黑色矩形,这样图像 J 将完全被黑色像素包围

【讨论】: