Python OpenCV如何在矩形内绘制ractangle图像中心和裁剪图像?

时间:2017-10-17 17:16:10

标签: python opencv image-processing

我使用Python3 OpenCV3。我想在矩形内绘制ractangle图像中心和裁剪图像。 我尝试运行此代码,但矩形不显示在图像的中心。

const firstMatch = findIndexFrom(locations, differentTo(locations[0]), 1);
if (firstMatch == -1) return [];
const afterMatch = findIndexFrom(locations, differentTo(locations[firstMatch]), firstMatch+1);
if (afterMatch == -1) return locations.slice(firstMatch);
else                  return locations.slice(firstMatch, afterMatch);

function differentTo(target) {
  return function(location) {
    return Math.abs(target.lat - location.lat) + Math.abs(target.lng - location.lng) > 1;
  };
}
function findIndexFrom(arr, pred, index) { // unfortunately the native `findIndex` doesn't take a start position like `indexOf`
  for (; index < arr.length; index++)
    if (pred(arr[index], index))
      return index;
  return -1;
}

如何在矩形内绘制ractangle图像中心和裁剪图像?

2 个答案:

答案 0 :(得分:2)

import cv2
import numpy as np

img = np.random.randint(0, 256, size=(200, 300, 3), dtype=np.uint8)
height, width, channels = img.shape
upper_left = (int(width / 4), int(height / 4))
bottom_right = (int(width * 3 / 4), int(height * 3 / 4))

# draw in the image
cv2.rectangle(img, upper_left, bottom_right, (0, 255, 0), 2)
cv2.imshow('img', img)

# indexing array 
rect_img = img[upper_left[1] : bottom_right[1], upper_left[0] : bottom_right[0]]
rect_img[:] = 0    # modify value
cv2.imshow('aft', img)
cv2.waitKey()

试试这个:)

答案 1 :(得分:1)

您需要使用numpy slicing来裁剪图像。

OpenCV存储图片的方式是numpy array。这意味着你可以'&#39;它们就像numpy数组一样。

执行此操作的方法是使用以下syntax

cropped = img[top_edge : bottom_edge, left_edge : right_edge]

其中top_edgebottom_edge等是pixels vals

这可行的原因是因为numpy slicing允许您slice沿着任何axis - 每个用逗号隔开。

所以在这里,我们slicing rows图片的top_edgebottom_edgecolumns之间,然后逗号说下一步会影响{每个row {1}}。因此,对于给定的row,我们在sliceleft_edge之间right_edge。那就是它!

希望这很有用!的:)