我使用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图像中心和裁剪图像?
答案 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_edge
,bottom_edge
等是pixels
vals 。
这可行的原因是因为numpy
slicing
允许您slice
沿着任何axis
- 每个用逗号隔开。
所以在这里,我们slicing
rows
图片的top_edge
到bottom_edge
和columns
之间,然后逗号说下一步会影响{每个row
{1}}。因此,对于给定的row
,我们在slice
和left_edge
之间right_edge
。那就是它!
希望这很有用!的:)强>