일부 회색 음영 이미지를 참조하기 위해 cython memoryviews를 사용하고 있습니다. 필자가 작성한 일부 이미지 처리 코드에서이를 성공적으로 사용했습니다. 이제 OpenCV 기능을 사용해야합니다. 불행히도 OpenCV 함수에 memoryviews를 이미지 인수로 전달할 수 없음을 알았습니다. 코드가 컴파일되지만 실행하면 OpenCV 함수 호출에서 "TypeError : numpy 배열이 아닙니다"와 함께 중지됩니다.OpenCV 함수에 cython memoryviews 전달
np.asarray (my_memoryview)를 사용하여 memoryview를 numpy 배열로 다시 변환 할 수 있습니다. 이 작동하지만 데이터를 복사하고 느립니다.
memoryview 설명서에서 numpy에 강요에 대해 이야기합니다. http://docs.cython.org/src/userguide/memoryviews.html#coercion-to-numpy 마치 메모리를 복사하지 않고 numview 배열에 메모리 뷰를 강제 변환 할 수있는 것처럼 보입니다. 그러나, 나는 쓰기 :
im = np.asarray(<np.uint8_t[:, :]> my_memoryview)
은 컴파일 오류가 발생합니다
OpenCV의 기능에 memoryview를 전달하는 방법에 어떤 도움, 또는 "단지 포인터 나 배열에서 cython.array을 만들 수" 어떻게 데이터를 복사하지 않고 numpy 배열에 memoryview를 강요하는 것은 매우 감사하겠습니다!
어디서 원래 메모리 뷰를 얻었습니까? – r3m0t
다음과 같이 numpy 배열 (openCV 이미지)에서 원래 메모리 뷰를 얻습니다. cdef np.uint8_t [:, :: 1] im2 = im 그러면 im2를 조작하고 기본적으로 서브 윈도우 (메모리 뷰)를 추출합니다. 그렇다면 cv2.matchTemplate에 전달합니다. 메모리 뷰를 직접 전달할 수 없기 때문에 현재 np.asarray (서브 윈도우)를 사용하고 있습니다. 내가 nump 문서 예제에 강요를 missinterpreted했을 수 있습니다, 그 예제에서 그들은 memoryview에 대한 포인터를 캐스팅하고 내가하고있는 동일한 np.asarray와 numpy 배열로 변환합니다. 그러나 강제 또는 복사 중인지 확실하지 않습니다. – martinako