Tag:

值得用mod替换if语句为圆形索引

我需要一个变量来指向数组索引,并且像圆圈一样,当它到达数组的末尾时返回0。 我知道我可以使用if语句判断,但我不确定是否会更快或者不使用mod来实现相同的function,有人能给我一些建议吗? int p=0; int arr[10]; void add_index(){ if(p==9) p=0; else p++; } 要么 int p=0; int arr[10]; void add_index(){ p=(p+1)%10; }

球碰撞检测

我试图检测白球最初接触的颜色球。 所有球的坐标和颜色都是已知的,并且球的video输入将是顶视图,因此只有xy中的坐标 我检测到的球的代码如下 *//draw all detected circles for (int i = 0; i total; i++) { // round the floats to an int float* p = (float*)cvGetSeqElem(circles, i); cv::Point center(cvRound(p[0]), cvRound(p[1])); int radius = cvRound(p[2]); //uchar* ptr; //ptr = cvPtr2D(img, center.y, center.x, NULL); //printf(“B: %d G: %d R: %d\n”, ptr[0],ptr[1],ptr[2]); CvScalar s; s = cvGet2D(img,center.y, […]

圆形厚度绘图算法

目前我正在使用Bresenham的圆绘制算法,它可以精确地绘制圆圈,但是我想要一种相对快速有效的方法来绘制具有指定厚度的圆(因为Bresenham的方法只绘制单个像素厚度)。 我意识到我可以简单地绘制具有不同半径的多个圆圈,但我相信这将是非常低效的(并且效率很重要因为这将在Arduino上运行,其中每微秒都是珍贵的)。 我目前正在使用以下代码: void circle(byte xc, byte yc, int radius, Colour colour) { int x = -radius, y = 0, err = 2 – 2 * radius; while(x < 0) { setPixel(xc – x, yc + y, colour); setPixel(xc – y, yc – x, colour); setPixel(xc + x, yc – y, colour); setPixel(xc + y, […]

OpenCV cvFindContours – 如何分离轮廓的组件

我一直在玩OpenCV,并且有很多试验和错误已经设法学习如何检测照片中的圆圈(硬币)。 一切都很好,除非我直接将硬币放在一起(如下所示,忽略了第二张图像倒置的事实)。 看来因为cvFindContours认为它们是同一个对象。 我的问题是如何将这些轮廓分成不同的对象,或者获取已经分离的轮廓列表。 我用于cvFindContours的参数是: cvFindContours( img, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE, cvPoint(0, 0) ); 任何帮助或建议将不胜感激。