尝试从NumPy数组中提取给定8点的补丁

时间:2019-01-08 05:21:56

标签: python numpy

我有一个看起来像这样的数组

boxes = [268,885,426,865,406,707,248,727]

这是(x,y)分的集合。如果我使用此功能绘制此图:

def draw_boxes_on_image_mod(image, boxes):

  image_copy = image.copy()
  image_copy = np.array(image_copy)
  cv2.line(image_copy, (boxes[0],boxes[1]),(boxes[2],boxes[3]),(0,255,255),2)
  cv2.line(image_copy, (boxes[4], boxes[5]),(boxes[6],boxes[7]),(0,255,255),2)
  cv2.line(image_copy, (boxes[0],boxes[1]),(boxes[6],boxes[7]),(0,255,255),2)
  cv2.line(image_copy, (boxes[4], boxes[5]),(boxes[2],boxes[3]),(0,255,255),2)

  scipy. misc.imsave('/home/ryan/TEST.png', image_copy)
  return image_copy

我得到的图像上有一个我感兴趣的部分绘制的矩形,但是我想要的是提取该部分并将其转换为图像。

我当时正在考虑使用NumPy索引来实现这一目标,但是

image = image[268:426]

我发现很难理解如何将(x,y)值索引在一起。

任何建议都会非常有帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

当您仅调用A [1:3]时,您所需要的只是第1行和第2行,包括1行并在3之前停止的行,因此您还必须考虑各列以获取所需的确切子节。

您可以通过指定行和列的范围以numpy的方式执行此操作,所需数组的子部分将从行开始,以行+ m结束,以及以列开始,并以column + n结束

例如

public class Main3Activity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main3);

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
        Intent intent = new Intent(this, Main2Activity.class);
        startActivity(intent);
    }

}

@Override
public void onBackPressed() {
    super.onBackPressed();
    finish();
}

}

我们只想将中间的值设置为1,所以我们用

选择它们
 A = np.array([[0, 0, 0, 0],
               [0, 1, 1, 0],
               [0, 1, 1, 0],
               [0, 0, 0, 0]]) 

获取

       Asub = A[1:3,1:3]