繁体   English   中英

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

[英]Python, Cv2, numpy to indicate areas in a picture/image

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

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

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

如果我理解你想要做什么,请纠正我,如果我错了,你可以通过保存和检索区域坐标作为单个值来解决问题,而不是作为对

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]

这就是你想要的。 (添加逗号并关闭括号)

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

现在来获取你的子阵列

test = np.random.randint(0,255,(480,960,3)) # random RGB
out = [test[area] for area in list_of_areas]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM