Python,Cv2,numpy表示图片/图片中的区域

时间:2017-09-14 06:01:38

标签: python image opencv numpy

我想指定图片中的某些区域。

要指定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

给出坐标的正确方法是什么?

2 个答案:

答案 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))]