Tag: opencv

OUTDATED – OpenCV的错误模式

我正在使用OpenCV 1进行一些图像处理,并对cvSetErrMode函数(它是CxCore的一部分)感到困惑。 OpenCV有三种错误模式。 Leaf:在调用error handling程序后终止程序。 父:程序未终止,但调用error handling程序。 无声:与父模式类似,但不调用error handling程序 在我的代码开始时,我调用cvSetErrMode(CV_ErrModeParent)从默认的’leaf’模式切换到’parent’模式,这样我的应用程序就不会因弹出exception/断言而终止。 不幸的是,“父母”模式似乎不起作用。 我仍然弹出消息对话框,我的应用程序仍然终止。 如果我调用cvSetErrMode(CV_ErrModeSilent)然后它实际上是静默的,不再退出应用程序或抛出一个对话框…但这也意味着我不知道发生了错误。 在这种情况下,我认为模式正确设置。 有没有其他人似乎在此之前,并可能能够推荐一个解决方案? 参考文献: cvSetErrMode函数引用 打开CVerror handling模式参考

如何在OpenCV中使用cv :: createButton原型

我想了解如何使用在OpenCV文档中定义的cv :: createButton: http://opencv.jp/opencv-2svn_org/cpp/highgui_qt_new_functions.html#cv-createbutton 它说原型是: createButton(const string& button_name CV_DEFAULT(NULL), ButtonCallback on_change CV_DEFAULT(NULL), void* userdata CV_DEFAULT(NULL), int button_type CV_DEFAULT(CV_PUSH_BUTTON), int initial_button_state CV_DEFAULT(0) 但我不知道如何定义函数ButtonCallback以捕获按钮事件。 我做: cvCreateButton(“button6”, callbackButton2, pointer, CV_PUSH_BUTTON, 0); 声明按钮和 void callbackButton2(int state, void *pointer){ printf(“ok”); } 但它不起作用。 我不知道第三个参数“void * userdata”的含义。 有谁可以帮助我吗? 谢谢。

用cffi-libffi按值传递结构?

我的印象是CFFI无法通过值传递结构,但CFFI文档说: 要按值传递或返回结构到函数,请加载cffi-libffi系统并将结构指定为(:struct structure-name) 。 要传递或返回指针,可以使用:pointer或(:pointer (:struct structure-name)) 。 我正在重新包装cl-opencv函数get-size ,它是这个opencv函数的包装器: CvSize cvGetSize(const CvArr* arr) 因为我不认为当cl-opencv的作者编写库时,CFFI能够通过cffi-libffi系统按值传递结构,所以他必须使用以下所有代码来包装cvGetSize : (defmacro make-structure-serializers (struct slot1 slot2) “Create a serialization and deserialization function for the structure STRUCT with integer slots SLOT1 and SLOT2. These functions will pack and unpack the structure into an INT64.” (let ((pack-fn (intern (concatenate ‘string (string struct) […]

使用单个相机计算距离

我想计算场景中某些物体的距离,我知道我只能计算使用单个相机时的相对距离,但我知道场景中某些物体的坐标,所以理论上应该可以计算实际距离。 根据opencv邮件列表档案, http://tech.groups.yahoo.com/group/OpenCV/message/73541 cvFindExtrinsicCameraParams2是要使用的函数,但我找不到有关如何使用它的信息? PS。 假设相机已正确校准。

C ++ OpenCV 2.3中缺少MoveWindow()

我正在使用OpenCV 2.3的C ++版本,我正在努力完成一项基本任务。 我想要做的是创建一个窗口并将其移动到屏幕上的特定位置,例如: cv::namedWindow(“My Window”, 1); cv::MoveWindow(“My Window”, 10, 10); 但是,似乎MoveWindow()函数不可用。 从OpenCV 2.3文档( 链接 )看来,似乎有C和Python实现,但没有C ++。 这是否意味着有更好的方法可以做到这一点? 从文档的相关部分: MoveWindow ========== Moves window to the specified position ————————————– C: void cvMoveWindow(const char* name, int x, int y) Python: cv.MoveWindow(name, x, y) → None Parameters: – name – Window name – x – The new x-coordinate […]

OpenCV:访问并获取像素的平方根

我正在使用OpenCV进行对象检测,我希望能够执行的操作之一是每像素平方根。 我想环路会是这样的: IplImage* img_; … for (int y = 0; y height; y++) { for(int x = 0; x width; x++) { // Take pixel square root here } } 我的问题是如何访问IplImage对象中坐标(x,y)处的像素值?

使用OpenCV在同一窗口中显示多个图像

我有三个火线相机可以通过硬件自动同步,我正在尝试捕获帧,将它们保存到我的硬盘中并在窗口中显示它们。 一切正常,但此刻, 我只能同时在三个不同的窗口中显示帧 。 我想在一个窗口中显示帧,但我不知道如何做到这一点。 在这个链接有cvShowManyImages()函数但你必须同时传递三个帧,但我有一个for()循环,它可以一次考虑一个帧。 这是我正在使用的代码: for ( int j = 0; j < k_numImages; j++ ) { // Display the timestamps for all cameras to show that the image // capture is synchronized for each image for ( unsigned int i = 0; i RetrieveBuffer( &image ); if (error != PGRERROR_OK) { PrintError( […]

无法将’cv :: VideoCapture’转换为’CvCapture *’

我有一个简单的程序,它拍摄video并播放它(虽然它对video进行了一些图像处理)。 可以从对话框结果中检索video,也可以直接通过提供文件路径来检索video。 当我使用cv :: CvCapture capture1时 ,我得到了像capture1.isOpen(), capture1.get(CV_CAP_PROP_FRAME_COUNT)等属性,但是当我使用CvCapture * capture2时,我得到了奇怪的错误。 我想使用cv :: CvCapture capture1,因为我的函数与capture1一致 。 或者有没有办法使用这两种类型之间的某种转换,如类型转换或其他东西。 实际上我有两个程序,program1的function是cv :: CvCapture ,program2的function是CvCapture * 。 我的意思是这两个程序以不同的方式读取video文件。 然后我合并了这两个程序,以使用program1中的一些函数和program2中的一些函数。 但我无法将cv :: CvCapture转换为CvCapture * 。 我正在使用OpenCv和Qt Creator。 我的代码在这里发布很长,但我已经简化了我的代码,使其更小,更容易理解。 我的代码可能无法正确编译,因为我修改它以使其更简单。 任何帮助,将不胜感激。 提前致谢 :) void MainWindow::on_pushButton_clicked() { std::string fileName = QFileDialog::getOpenFileName(this,tr(“Open Video”), “.”,tr(“Video Files (*.mp4 *.avi)”)).toStdString(); cv::VideoCapture capture1(fileName); // when I use the […]

使用OpenCV检测小圆圈(图像质量差)

我正试图检测你在这张照片中央可以看到的四个点: 这个转换为png,我实际上使用ppm格式(从相机的原始输出转换后)。 实际处理的图像可在此处获得 我是opencv的新手,因此在检测这些点时遇到了很大的问题。 这是我迄今为止最好的结果: 正如你所看到的,我已经检测到了3个点,但除此之外,图片中的许多其他东西都被识别为圆圈。 这是代码: IplImage* img; if((img = cvLoadImage( “photos/img-000012.ppm”, 1)) == 0 ) { perror(“cvLoadImage”); return 1; } cvNamedWindow( “Image view”, 1 ); cvShowImage( “Image view”, img ); // cvWaitKey(0); IplImage* gray = cvCreateImage( cvGetSize(img), 8, 1 ); // allocate a 1 channel byte image CvMemStorage* storage = cvCreateMemStorage(0); cvCvtColor( img, […]

如何使用MSER检测图像中的区域

我创建了一个应用程序,它提取MSER数据并将其存储在CvSeq* 。 我想知道OpenCV中是否有任何函数或教程,我可以使用两个图像的提取数据将数据与另一个图像进行比较。 谢谢。