Image 从纸质目标检测圆和射击
我正在做一个小项目,在那里我必须检测从给定的纸张目标图像中得到的分数。类似于iPhone的TargetScan应用程序 我使用openCV处理图像,基本上我有两个部分,一个是从目标检测圆(这在Hough圆变换中非常有效),第二部分是检测镜头。我需要一些关于如何从给定图像中检测这些镜头的想法。下面是一幅启用圆检测的示例图像(绿色线表示检测到的圆,红色点表示中心)。openCV中的哪些算法可用于检测这些嫩芽? 下面是另一个示例图像 算法:Image 从纸质目标检测圆和射击,image,opencv,image-processing,computer-vision,artificial-intelligence,Image,Opencv,Image Processing,Computer Vision,Artificial Intelligence,我正在做一个小项目,在那里我必须检测从给定的纸张目标图像中得到的分数。类似于iPhone的TargetScan应用程序 我使用openCV处理图像,基本上我有两个部分,一个是从目标检测圆(这在Hough圆变换中非常有效),第二部分是检测镜头。我需要一些关于如何从给定图像中检测这些镜头的想法。下面是一幅启用圆检测的示例图像(绿色线表示检测到的圆,红色点表示中心)。openCV中的哪些算法可用于检测这些嫩芽? 下面是另一个示例图像 算法: 为图像创建/清除遮罩 对图像进行二值化(通过某种强度阈值将
x,y
方向上有多少相同颜色的像素
叫它wx,wywx
或wy
应小于薄阈值,而另一个圆圈应更大镜头很大,因此展位wx
和wy
必须在镜头直径范围内中间部分为黑色,boothwx,wy
高于所有阈值(您可以在此处计算平均点)。将此信息存储到掩码中2*PI*r
一致图片pic0、pic1、pic2;
//pic0源
//pic1-输出
//pic2-掩模
int x,y,i,n,wx,wy;
int r0=3;//细曲线宽齿槽[像素]
int r1a=15;//镜头直径最小treshod[像素]
int r1b=30;//镜头直径最大treshod[像素]
int x0,y0;//平均点==中心
//初始输出为源图像,但仅以灰度强度输出
pic1=pic0;
pic1.rgb2i();
//初始掩码(源图像的大小)
pic2.resize(pic0.xs,pic0.ys);
pic2.clear(0);
//将图像二值化并转换回RGB
对于(y=r0;x0,y0-i);
pic1.bmp->Canvas->LineTo(x0,y0+i);
我使用自己的图片类处理图像,因此一些成员是:
xs,ys
以像素为单位的图像大小
p[y][x].dd
是位于(x,y)
位置的32位整数类型的像素
清除(彩色)
-清除整个图像
调整大小(xs,ys)
-将图像大小调整为新的分辨率
这是重新存储的结果
- 绿色细圆
- 蓝色中段
- 红十字会(圆心)
- 红色镜头
//创建并清除半径直方图
n=xs;如果(nPen->Width=r0;
pic1.bmp->Canvas->Brush->Style=bsClear;
对于(i=0;i=0.3)和(aCanvas->椭圆(x0-i,y0-i,x0+i,y0+i);
}
pic1.bmp->Canvas->Brush->Style=bsSolid;
pic1.bmp->Canvas->Pen->Width=1;
删除[]历史记录;
检测到的圆是洋红色的…我认为很好。中间部分有点扭曲。你可以计算平均半径步长并插值缺少的圆…你也可以分享你的图片类吗?我很想使用它。@Aman不,但它很可能对你没有好处,因为它是VCL边界,并且使用了一些公司代码C(C++)类本身是~(120)字节的纯源代码。但是,与描述方法一样,共享它的特定部分是可以的,因为我在SO/SE上做了很多次。如果您只需要简单快捷的像素访问,请看这是我的图片所构建的相同的东西。