Я хочу передать изображение из кода Python в функцию С++. Моя функция С++ находится в файле .so и загружается в python с использованием ctypes. Функция С++ принимает аргумент типа Mat
. Аргумент (то есть изображение) передается из Python (с использованием opencv).
Когда я пытаюсь запустить описанный выше сценарий, он выдает ошибку, как показано ниже;
ctypes.ArgumentError: аргумент 1:: Не знаю, как преобразовать параметр 1
Мой код приведен ниже: test.py
import cv2
from ctypes import *
testso = CDLL("./libvideoread.so")
cap = cv2.VideoCapture("Bigbunny.mp4")
if(cap.isOpened == False):
print("error")
else:
frame_width = int(cap.get(3))
frame_height = int(cap.get(4))
cv2.namedWindow('frame',cv2.WINDOW_NORMAL)
while(cap.isOpened):
ret,frame = cap.read()
if ret:
testso.imgread(frame)
else:
break
cap.release()
cv2.destroyAllWindows()
СРР-код:
void imgread(Mat frame)
{
/*Do something*/
}
Проверил ошибку онлайн и узнал, что Opencv-python преобразует данные изображения в массив numpy. И Opencv-С++ использует тип Mat. Итак, как я могу преобразовать массив numpy в тип Mat или передать изображение из функции python в функцию c++.
Я не хочу использовать Boost::python
Спасибо.