我想指定图片中的某些区域。
要指定1个区域,我可以这样做:
import cv2
import numpy as np
the_picture = cv2.imread("c:\\picture.jpg")
target_area = the_picture[300:360, 130:280]
target_area的类型是'numpy.ndarray'类型。
但是坐标列表是个问题。我正在努力将坐标列表转换为所需的值。
我想做的是:
the_picture = cv2.imread("c:\\picture.jpg")
list_of_areas = [
[300:360 , 130:280]
[300:360 , 440:540]
[400:460 , 0:130]
[400:460 , 250:400]
[400:460 , 560:740]
For area in list_of_areas:
the_picture(area) ### failed
以下是坐标:
x y x1 y1
Area1 130 300 280 360
Area2 440 300 540 360
Area3 0 400 130 460
Area4 250 400 400 460
Area5 560 400 740 460
我试着给出如下的列表,但它不起作用。我也尝试在列表中创建字符串,将Square Brackets更改为Round Brackets也没有用。
SyntaxError: invalid syntax
给出坐标的正确方法是什么?
答案 0 :(得分:2)
如果我理解你想做什么,请纠正我,如果我错了,你可以通过保存和检索区域坐标作为单个值来解决问题,而不是作为对
the_picture = cv2.imread("c:\\picture.jpg")
list_of_areas = [
[300, 360, 130, 280],
[300, 360, 440, 540],
[400, 460, 0, 130],
[400, 460 , 250, 400],
[400, 460, 560, 740]]
For y,y1,x,x1 in list_of_areas:
the_picture[y:y1, x:x1]
答案 1 :(得分:1)
我认为这就是你想要的。 (添加逗号并关闭括号)
Map
它为您提供了切片对象的元组列表
list_of_areas = [np.index_exp[300:360 , 130:280],
np.index_exp[300:360 , 440:540],
np.index_exp[400:460 , 0:130],
np.index_exp[400:460 , 250:400],
np.index_exp[400:460 , 560:740]]
现在获取你的子阵列
list_of_areas
[(slice(300, 360, None), slice(130, 280, None)),
(slice(300, 360, None), slice(440, 540, None)),
(slice(400, 460, None), slice(0, 130, None)),
(slice(400, 460, None), slice(250, 400, None)),
(slice(400, 460, None), slice(560, 740, None))]