4

假设我有一个 200x200 像素的图像。我想要一个 800x800 像素的版本,我基本上复制 200x200 图像并填充 800x800 图像(将较小的图像平铺到较大的图像中)。

你将如何在openCV中做到这一点?看起来很简单,但我不知道如何创建另一个与图案类型相同但尺寸更大(画布尺寸)的 cv::Mat 或者是否可以获取原始的 200x200 像素图像和增加它的行和列然后只需使用循环将角粘贴到图像的其余部分。

我正在使用openCV 2.3顺便说一句。我已经对具有固定尺寸的图像进行了相当多的处理,但是在增加矩阵的尺寸时我有点无能为力。

4

2 回答 2

1

您可以使用重复功能:

def tile_image(tile, height, width):      
  x_count = int(width / tile.shape[0]) + 1
  y_count = int(height / tile.shape[1]) + 1

  tiled = np.tile(tile, (y_count, x_count, 1))

  return tiled[0:height, 0:width]
于 2021-03-08T21:33:25.503 回答
0

仅供参考-@karlphillip 回复中的博客,基本思想是使用cvSetImageROIand cvResetImageROI。两者都是 C API。

在以后的版本中,例如 v2.4 和 3.x,可以Rect使用所需的位置和尺寸定义 a 并将所需的部分称为img(rect)

C API 中的示例(功能样式):

cvSetImageROI(new_img, cvRect(tlx, tly, width, height);
cvCopy(old_img, new_img);
cvResetImageROI(new_img);

在使用类的 C++ API 中:

Mat roi(new_img, Rect(tlx, tly, width, height));
roi = old_img;    // or old_img.clone()

C ++中的另一种方式(复制图像):

old_img.copyTo(new_img(Rect(tlx, tly, width, height)))
于 2016-12-19T23:39:26.913 回答