2013-05-14 41 views
21

Tôi mới sử dụng opencv, đây là câu hỏi, hàm python hoạt động giống như cv :: clone() trong cpp là gì? Tôi chỉ cố gắng để có được một rect bởiSao chép hình ảnh trong python cv2

rectImg = img[10:20, 10:20] 

nhưng khi tôi vẽ một đường trên đó, tôi tìm thấy những dòng xuất hiện cả trên img và rectImage, vì vậy, làm thế nào tôi có thể thực hiện điều này?

Trả lời

30

Nếu bạn sử dụng cv2, phương pháp đúng là sử dụng phương thức .copy() trong Numpy. Nó sẽ tạo một bản sao của mảng mà bạn cần. Nếu không, nó sẽ chỉ tạo ra một cái nhìn của đối tượng đó.

ví dụ:

In [1]: import numpy as np 

In [2]: x = np.arange(10*10).reshape((10,10)) 

In [4]: y = x[3:7,3:7].copy() 

In [6]: y[2,2] = 1000 

In [8]: 1000 in x 
Out[8]: False  # see, 1000 in y doesn't change values in x, parent array. 
+1

Tất cả các số ma thuật đó có nghĩa là gì – raaj

+0

Chúng chỉ là các số trong khoảng 0-100. Chỉ cần in 'x' và' y' sau mỗi bước. Sau đó, bạn sẽ có được ý tưởng. –

1

Bạn chỉ có thể sử dụng thư viện chuẩn của Python. Tạo bản sao nông của hình ảnh gốc như sau:

import copy 

original_img = cv2.imread("foo.jpg") 
clone_img = copy.copy(original_img) 
0

Phương thức yêu thích của tôi sử dụng cv2.copyMakeBorder không có đường viền, như vậy.

copy = cv2.copyMakeBorder(original,0,0,0,0,cv2.BORDER_REPLICATE) 
26

Câu trả lời đầu tiên là chính xác nhưng bạn nói rằng bạn đang sử dụng cv2 vốn đã sử dụng mảng có nhiều mảng. Vì vậy, để tạo một bản sao hoàn chỉnh khác của câu nói "myImage":

newImage = myImage.copy() 

Ở trên là đủ. Không cần phải nhập khẩu gumpy.

Các vấn đề liên quan