- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
您好 stackoverflow 社区!我使用的是 MacBook Pro OS X 10.8.5。我从源代码下载了一个内置的 opencv,并用一个简单的例子对其进行了测试。它似乎工作正常。我尽量不使用 IDE。相反,我只是在文本编辑器中编写代码并从终端编译。我用g++ Follow_Ball.cpp -o Follow_Ball pkg-config --cflags --libs opencv
当我这样做时,我没有收到任何错误,但是当我尝试运行可执行文件“./Follow_Ball”时它给了我以下错误。
OpenCV 错误:断言失败(src1.size == dst.size && dst.type() == CV_8U)在 cvInRangeS,文件/opt/local/var/macports/build/_opt_mports_dports_graphics_opencv/opencv/work/opencv- 2.4.7/modules/core/src/arithm.cpp,第 2972 行libc++abi.dylib:终止调用抛出异常中止陷阱:6
附加信息,即可能相关的信息...我正在尝试使用 MacBook Pro 中内置的网络摄像头 http://www.apple.com/macbook-pro/我设置“CvSize size640x480 = cvSize(640,480);”我不确定那是否是我电脑的像素。也许这可能是导致问题的原因?我还注释掉了第 117 行,因为我无法让它工作,而且我认为我不需要它,因为我只在球周围画了一条红线。我对如何调试它有点困惑。
有人可以帮助我吗?我是 opencv 的新手,没有太多关于如何调试它的知识或经验。感谢你们!
("顺便说一句,我正在学习教程 http://www.lirtex.com/robotics/fast-object-tracking-robot-computer-vision/ ")这是代码...
#include <opencv/cvaux.h>
#include <opencv/highgui.h>
#include <opencv/cxcore.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <math.h>
#include <float.h>
#include <limits.h>
#include <time.h>
#include <ctype.h>
int main(int argc, char* argv[]){
// Default capture size - 640x480
CvSize size640x480 = cvSize(640,480);
// Open capture device. 0 is /dev/video0, 1 is /dev/video1, etc.
// Web cam video stream is assinged to this
CvCapture *p_capWebCam;
//pointer to an image structure.
//this will be the imput image from webcam
IplImage *p_imgOriginal;
//Pointer to an immage structure
//this will be the processed black and white immage
/* Ipl is short for Intel Immage processing library. This is the standard
structure in opencv to work with immages. */
IplImage *p_imgProcessed;
//Necessary storage variable to pass into cvHoughCircles()
CvMemStorage *p_strStorage;
//pointer to an opencv sequence, will be returned by cvHough Circles() and will contain all circles
// calling cvGetSeqElem(p_seqCircles, i) willreturn 3 element array of i'th circle (see next variable)
CvSeq *p_seqCircles;
//pointer to a 3 element of array of floats
//[0] => x position of detected object
//[1] => y position of detected object
//[2] => Radius of detected object
float *p_fltXYRadius; //pointer to a 3 element array of floats
int i; //loop counter
char charCheckForEscKey; //get char to escape
p_capWebCam = cvCaptureFromCAM(0); //If you have multiple webcams you might not want to use 0
//However, since i have only one i pass the parameter 0
//check if the webcam works
if( p_capWebCam == NULL ){
printf("ERROR: capture is NULL"); //If web cam wasnt plugged in for example we'd exit the program
getchar(); //pause so that user sees the message
return(-1); //exit the program
}
//declare the two windows
cvNamedWindow("Original", CV_WINDOW_AUTOSIZE ); // Origina image from webcam
cvNamedWindow("Processed", CV_WINDOW_AUTOSIZE); // Processed image we will use for detecting circles
p_imgProcessed = cvCreateImage(size640x480, //creates the immage for the Processed window
IPL_DEPTH_8U, 1); //8U is short for 8 bits unsigned //we use 1 for greyscale if collow we use 3
//this is a greyscale immage so each pixel can go from 0->255 greyscale
//it this was color "Red Green Blue" would be a value for each color: well call this
//the depth
// Infinate while loop where fram is grabbed from cam and processed
while(1){ //for each frame...
p_imgOriginal = cvQueryFrame(p_capWebCam); //get frame from webcam
//check to see if the frame capture was sucessfull
if(p_imgOriginal == NULL){ //if frame was not capture sucessfully
printf("ERROR: frame is NULL \n" );
getchar();
break;
}
// 44:46 http://www.youtube.com/watch?v=2i2bt-YSlYQ&list=PLbqNFa0YhiNBHuQOwalaP5jNGExrmsGOO
cvInRangeS(p_imgOriginal, //function input //color
CV_RGB(175, 0 , 0), //this is a macro, we want to capture a red ball at atleast 175 inclusive
CV_RGB(255, 100, 100), //we allow a bit of green and blue: Redis max 256 not inclusive
p_imgProcessed ); //function output //black and white
//alocate storage variable
p_strStorage = cvCreateMemStorage(0); //alocate necessary storage variable to pass int cvHoughCirlces()
//now we apply agousian smoothing to the processed image. this will make it easyer for next func to pic circles
cvSmooth(p_imgProcessed, //function input
p_imgProcessed, //function output
CV_GAUSSIAN, //Use Gaussian filter (averages nearby pixels, with closses having more wheight)
9, //Smothing filter window width
9); //Smoothing filter window height
//imigin a 9x9 box in the input immage it does stuff smooths out the output
//fills a sequential structure with all circles in a processed immgage
p_seqCircles = cvHoughCircles( p_imgProcessed, //input: hast to be greyscale "no color"
p_strStorage, //Needs this we need not know why. passing this makes func ret pointer
CV_HOUGH_GRADIENT , //Only option for this, two pass algorithim for detecting circles
2, // size of this image/ (this value) = accumulator immage
p_imgProcessed->height/4, //min distance in pixels between centers of detected circles
100, //high threshold of Cany edge detector, called by cvHoughCircles
50, //low threshold of Cany edge detector, called by cvHoughCircles
10, //Minimub circle radius
400); //max circle radius
for(i = 0; i < p_seqCircles->total; i++){ //for each element in sequential circles structure( i.e. for each object detected)
p_fltXYRadius = (float*)cvGetSeqElem(p_seqCircles, i); //from the sequential struct, read the i'th value into a pointer to a float
printf("ball position x = %f, y = %f, r = %f \n", p_fltXYRadius[0], //x position at center of circle
p_fltXYRadius[1], //y position at center of circle
p_fltXYRadius[2]); //radius of circle
//draw a small green circle at center of detected object
cvCircle(p_imgOriginal, //draw on the original image
cvPoint(cvRound(p_fltXYRadius[0]), cvRound(p_fltXYRadius[1])), // center point of circle
3, //3 pixel radius of circle
CV_RGB(0, 255, 0), //draw pure green
CV_FILLED); //thickness, fill in the circle
/* this draws a circle around second ball but i dont need it
//draw a red circle around a detected object
cvCircle(p_imgOriginal, //draw on the original image
cvPoint(cvRound(p_fltXYRadius[0]), cvRound(p_fltXYRadius[1])), // center point of circle
cvRound(p_fltXYRadius[2], //radius of the circle in pixels
CV_RGB(255, 0, 0), //draw pure red
3); //thickness of circle in pixels
*/
}// end of for loop
//now we just need to show the images that we already generated
cvShowImage("Original", p_imgOriginal); //original circle with detectec ball overlay
cvShowImage("Processed", p_imgProcessed); //image after processing
cvReleaseMemStorage(&p_strStorage); //release what we alocated earlyer
charCheckForEscKey = cvWaitKey(10); //delay in ms, and get key press, if any
if( charCheckForEscKey == 27) break; // if ascii 27 was pressed jump out of while loop
}// end of while
cvReleaseCapture(&p_capWebCam);
cvDestroyWindow("Original");
cvDestroyWindow("Processed");
return(0);
}// end of program
最佳答案
谢谢,我能够修复原来是像素的错误。我插入了以下代码来动态查找像素大小
CvCapture * camera = cvCreateCameraCapture (CV_CAP_ANY);
IplImage * current_frame = cvQueryFrame (camera);
CvSize size640x480 = cvSize(current_frame->width, current_frame->height); //tried 640, 480 : 600,500 : 500,600
关于c++ - OpenCV 错误 : Assertion failed (src1. size == dst.size && dst.type() == CV_8U) in cvInRangeS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20004724/
我正在尝试从我的系统中完全删除 opencv。我试图学习 ROS,而在教程中我遇到了一个问题。创建空工作区后,我调用catkin_make 它给出了一个常见错误,我在 answers.ros 中搜索并
我在尝试逐步转移对warpAffine的调用时遇到崩溃(不是异常): void rotateImage( const Mat& source, double degree, Mat& output )
如何处理opencv gpu异常?是否有用于opencvgpu异常处理的特定错误代码集api? 我尝试了很多搜索,但只有1个错误代码,即CV_GpuNotSupported。 请帮帮我。 最佳答案 虽
笔记 我是 OpenCV(或计算机视觉)的新手,所以告诉我搜索查询会很有帮助! 我想问什么 我想编写一个从图片中提取名片的程序。 我能够提取粗略的轮廓,但反射光会变成噪点,我无法提取准确的轮廓。请告诉
我想根据像素的某个阈值将Mono16类型的Mat转换为二进制图像。我尝试使用以下内容: 阈值(img,ret,0.1,1,CV_THRESH_BINARY); 尝试编译时,出现make错误,提示: 错
我对使用GPU加速的OpenCV中的卷积函数有疑问。 使用GPU的卷积速度大约快3.5 运行时: convolve(src_32F, kernel, cresult, false, cbuffer);
我正在尝试使用非对称圆圈网格执行相机校准。 我通常找不到适合CirclesGridFinder的文档,尤其是findHoles()函数的文档。 如果您有关于此功能如何工作以及其参数含义的信息,将不胜感
在计算机上绘图和在 OpenCV 的投影仪上投影之间有什么区别吗? 一种选择是投影显示所有内容的计算机屏幕。但也许也有这样的选择,即在投影仪上精确地绘制和投影图像,仅使用计算机作为计算机器。如果我能做
我将Processing(processing.org)用于需要人脸跟踪的项目。现在的问题是由于for循环,程序将耗尽内存。我想停止循环或至少解决内存不足的问题。这是代码。 import hyperm
我有下面的代码: // Image Processing.cpp : Defines the entry point for the console application. // //Save
我正在为某些项目使用opencv。并有应解决的任务。 任务很简单。我有一张主图片,并且有一个模板,而不是将主图片与模板进行比较。我使用matchTemplate()函数。我只是好奇一下。 在文档中,我
我正在尝试使用以下命令创建级联分类器: haartraining -data haarcascade -vec samples.vec -bg negatives.dat -nstages 20 -n
我试图使用OpenCV检测黑色图像中一组形状的颜色,为此我使用了Canny检测。但是,颜色输出总是返回为黑色。 std::vector > Asteroids::DetectPoints(const
我正在尝试使用OpenCv 2.4.5从边缘查找渐变方向,但是我在使用cvSobel()时遇到问题,以下是错误消息和我的代码。我在某处读到它可能是由于浮点(??)之间的转换,但我不知道如何解决它。有帮
我正在尝试构建循环关闭算法,但是在开始开发之前,我想测试哪种功能描述符在真实数据集上效果更好。 我有两个在两个方向拍摄的走廊图像,一个进入房间,另一个离开同一个房间。因此它们代表相同的场景,但具有2个
有没有一种方法可以比较直方图,但例如要排除白色,因此白色不会影响比较。 最佳答案 白色像素有 饱和度 , S = 0 .因此,在创建直方图时很容易从计数中删除白色像素。请执行下列操作: 从 BGR 转
就像本主题的标题一样,如何在OpenCV中确定图像的特定像素(灰度或彩色)是否饱和(例如,亮度过高)? 先感谢您。 最佳答案 根据定义,饱和像素是指与强度(即灰度值或颜色分量之一)等于255相关联的像
我是OpenCV的新用户,正在从事大学项目。程序会获取输入图像,对其进行综合模糊处理,然后对其进行模糊处理。当对合成模糊图像进行反卷积时,会生成边界伪像,因为...好吧,到目前为止,我还没有实现边界条
我想知道OpenCV是haar特征还是lbp是在多尺度搜索过程中缩放图像还是像论文中提到的那样缩放特征本身? 编辑:事实证明,检测器可以缩放图像,而不是功能。有人知道为什么吗?通过缩放功能可以更快。
我在openCv中使用SVM.train命令(已定义了适当的参数)。接下来,我要使用我的算法进行分类,而不是使用svm.predict。 可能吗?我可以访问训练时生成的支持 vector 吗?如果是这
我是一名优秀的程序员,十分优秀!