Я также задавался вопросом о возможности обертывания интерфейса C++ OpenCV в C, а затем обертывания этого в Lisp, чтобы я мог добавить все функциональные возможности C++ в свою оболочку cl-opencv, потому что я хотел бы сделать это полностью .... Также задавался вопросом, могу ли я это сделать, могу ли я использовать оболочку C++ с оболочкой C в lisp .... если это возможно, если вы можете показать мне быструю примерную программу, например, открытое окно и показать функцию изображения, только в c и C++ вместе .... нравится использовать cv :: namedWindow вместо cvNamedWindow, а все остальные части являются c ..... вот моя попытка программа ниже работает, когда я использую cv :: namedWindow, но с ошибкойМогу ли я перенести интерфейс C++ OpenCV на C и затем обернуть его с помощью CFFI Lisp?
shape.cpp:37:32: error: invalid initialization of
reference of type ‘cv::InputArray {aka const cv::_InputArray&}’
from expression of type ‘IplImage* {aka _IplImage*}’In file included from
/usr/local/include/opencv/highgui.h:48:0,
from shape.cpp:4:
/usr/local/include/opencv2/highgui/highgui.hpp:78:19: error:
in passing argument 2 of ‘void cv::imshow(const string&, cv::InputArray)’
Compilation exited abnormally with code 1 at Thu Sep 26 21:18:00
, когда я добавляю cv :: imshow
#include <cv.h>
#include <highgui.h>
using namespace std;
int main(){
CvCapture* capture =0;
capture = cvCaptureFromCAM(0);
if(!capture){
printf("Capture failure\n");
return -1;
}
IplImage* frame=0;
cv::namedWindow("Video");
// cout << "colorModel = " << endl << " " << size << endl << endl;
while(true){
frame = cvQueryFrame(capture);
if(!frame) break;
frame=cvCloneImage(frame);
cv::imshow("Video", frame);
cvReleaseImage(&frame);
//Wait 50mS
int c = cvWaitKey(10);
//If 'ESC' is pressed, break the loop
if((char)c==27) break;
}
cvDestroyAllWindows() ;
cvReleaseCapture(&capture);
return 0;
}
Я хотел бы знать, будет ли это выполнимо ... как быть на 100% уверен, прежде чем я начну, что я мог бы, по крайней мере, обернуть каждую функцию C++ в c и обернуть ее с помощью lisp..или если и подумать id запускается в коряги в некоторых местах или даже невозможности ..... а также будет его обертывание в два раза сделать его медленным? и id c-интерфейс лучше/хуже, чем C++ .. или я могу выполнить все в c-интерфейсе, который я могу в C++
Я спрашиваю об этом, потому что в документации swig и cffi говорится, что поддержка C++ не завершена.
Ах да, и я также попытался запустить приведенный выше код со всеми этими заголовками
#include <cv.h>
#include <highgui.h>
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
using namespace cv;
using namespace std;
и до сих пор получаю выше ошибки
Это просто догадка, я никогда этого не делал. Я слышал, что оба варианта можно связать с C++ кодом с Lisp и что это очень сложная задача, конечно, не прямолинейная. Мое другое предположение, как в том, что попробовать, я бы посмотрел на «extern» C «...» декларации и, возможно, работал оттуда, хотя это действительно просто ощущение кишки. –