【问题标题】:Offsetting a tiled shape inside the image frame偏移图像框架内的平铺形状
【发布时间】:2020-04-23 21:21:35
【问题描述】:

我有一张图片,其中只包含一个平铺的形状,其他地方都是黑色的。然而,这种平铺图案可以在图像中的任何地方移动/偏移,特别是在图像边界上。知道这个形状在偏移它并使边框黑色后可以适合图像内部,我如何计算在 x 和 y 坐标中需要偏移多少像素才能以优化的方式发生?

输入图像

偏移/shiftimg 后所需的输出

我的想法是在图像中获取连接的组件,检查边界上的标签,计算边界上每个轴形状之间的最长距离,并使用这些值在轴上偏移。它可以工作,但我觉得应该有更聪明的方法。

【问题讨论】:

  • 对不起,我不明白这个问题。发布您想要平铺在这些图片上的图像并显示输出示例。
  • 抵消它到底是什么意思?您能否提供一个代码 sn-p 显示对原始图像应用偏移量?
  • @Ehsan 通过偏移,我的意思是像 Photoshop 中的偏移过滤器一样移动或包裹图像。输入图像是第一张图像。如果您偏移该图像,您将获得图像框架内的所有内容,例如显示为所需输出的第二张照片。我只是在寻找一种方法来偏移图像足够的像素,以便这些形状落在框架内而不是在边框上。有意义吗?
  • @fmw42 请看我上面的评论
  • @Yasin 我理解这个问题和概念。我不确定的是您如何获得原始图像数据以及如何应用偏移量。我对photoshop一无所知。如果您在代码意义上提供偏移量的含义,将会很有帮助。

标签: python image numpy opencv offset


【解决方案1】:

以下是我在评论中使用 Python/OpenCV/Numpy 所做的详细说明。这是你想要的吗?

  • 读取输入
  • 转换为灰色
  • 二进制阈值
  • 统计每列白色像素的个数并存入数组
  • 查找数组中第一个和最后一个黑色(零计数)元素
  • 获取中心 x 值
  • 在中心 x 处将图像裁剪为左右部分
  • 以相反的顺序将它们水平堆叠在一起
  • 保存结果

输入:

import cv2
import numpy as np

# read image
img = cv2.imread('black_white.jpg')
hh, ww = img.shape[:2]

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold
thresh = cv2.threshold(gray, 128, 255, cv2.THRESH_BINARY)[1]

# count number of white pixels in columns as new array
count = np.count_nonzero(thresh, axis=0)

# get first and last x coordinate where black (count==0)
first_black = np.where(count==0)[0][0]
last_black = np.where(count==0)[0][-1]

# compute x center
black_center = (first_black + last_black) // 2
print(black_center)

# crop into two parts
left = img[0:hh, 0:black_center]
right = img[0:hh, black_center:ww]

# combine them horizontally after swapping
result = np.hstack([right, left])

# write result to disk
cv2.imwrite("black_white_rolled.jpg", result)

# display it
cv2.imshow("RESULT", result)
cv2.waitKey(0)


【讨论】:

  • 感谢您的回答。这几乎是我要找的,但是结果必须在图像边界内。在您的输出中,它们跨越顶部和底部,除非必须垂直执行相同的过程?
  • 是的,如果您希望垂直黑色区域拆分和交换,则需要对我在垂直维度上的结果执行相同的过程。我会把它留给你。如果您遇到问题,请回来,我会尽力提供帮助。
  • 完美!这几乎是相同的想法,但不确定如何有效地执行它。这是一个简洁的实现。谢谢:)
  • 和什么想法一样?您是否填写了我的垂直部分示例?如果是这样,请发布完整的解决方案。
  • 与我在原始问题中发布的想法相同。最后一段。你的实现是高效的,也是我想要的。
猜你喜欢
  • 1970-01-01
  • 2020-12-12
  • 1970-01-01
  • 2019-06-15
  • 1970-01-01
  • 1970-01-01
  • 2013-04-11
  • 1970-01-01
  • 2021-11-19
相关资源
最近更新 更多