简单图像识别问题

时间:2021-10-09 23:43:28
大家好,小弟有一个图像识别的问题:在一张白纸上,有四个圆圈(边上有ABCD标记),用笔涂黑其中一个,然后将这张纸扫描至硬盘。我想知道哪个圆圈被涂黑了,有什么思路吗?未接触过图像处理,请指教,谢谢,谢谢~~

9 个解决方案

#1


先把图像二值化,然后做一个连通域分析,把太大或者太小的连通域滤掉,找到这4个圆圈,这4个连通域中点数最多的那个就是你涂黑的那个

#2


引用 1 楼 zhangyan_wt 的回复:
先把图像二值化,然后做一个连通域分析,把太大或者太小的连通域滤掉,找到这4个圆圈,这4个连通域中点数最多的那个就是你涂黑的那个

非常感谢,二值化,是不是可以把图像转换为一个由0和1组成的二位数组呢?我要找到这个涂黑的圆圈,是不是意味着我要找1最紧密的地方呢?另外,请教一个问题:如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?谢谢~~

#3


我要找到这个涂黑的圆圈,是不是意味着我要找1最紧密的地方呢?
答:统计一下一个连通区域像素值为1的个数再进行比较,就可以判断了!
如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?
答:看你的图片原来一个像素是由多少位来组成的,如果是8位,那么就是400*600个字节,如果是2位,就是400*600*2/8个字节,如果是24位就是400*600*24/8个字节的大小,相应的就要在程序中分配相应的内存空间存放像素数据

#4


是不是意味着我要找1最紧密的地方呢?
-------------------------------
是这个思路,不过一般1是白,0才是黑


如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?
--------------------------------------------------------------
是的,用bool类型

#5


这个问题在matlab下是很轻松实现的,在c下,麻烦一下 ,但思路是一样的。

#6


建议你看看《vc++数字图像处理》这本书

#7


   二值话后,设置灰度阈值,只选出黑的部分,联通域分析,点密集的地方就是了。

#8


如果知道圆圈在哪里画的,就直接规定几个区域,然后对图像进行扫描,针对区块扫描,黑的最多的区块,和你指定的区块对比一下就知道哪个被涂黑了

#9


简单的黑白图像的直接遍历所有像素,然后做四邻域联通检测

#1


先把图像二值化,然后做一个连通域分析,把太大或者太小的连通域滤掉,找到这4个圆圈,这4个连通域中点数最多的那个就是你涂黑的那个

#2


引用 1 楼 zhangyan_wt 的回复:
先把图像二值化,然后做一个连通域分析,把太大或者太小的连通域滤掉,找到这4个圆圈,这4个连通域中点数最多的那个就是你涂黑的那个

非常感谢,二值化,是不是可以把图像转换为一个由0和1组成的二位数组呢?我要找到这个涂黑的圆圈,是不是意味着我要找1最紧密的地方呢?另外,请教一个问题:如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?谢谢~~

#3


我要找到这个涂黑的圆圈,是不是意味着我要找1最紧密的地方呢?
答:统计一下一个连通区域像素值为1的个数再进行比较,就可以判断了!
如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?
答:看你的图片原来一个像素是由多少位来组成的,如果是8位,那么就是400*600个字节,如果是2位,就是400*600*2/8个字节,如果是24位就是400*600*24/8个字节的大小,相应的就要在程序中分配相应的内存空间存放像素数据

#4


是不是意味着我要找1最紧密的地方呢?
-------------------------------
是这个思路,不过一般1是白,0才是黑


如果一张图片是400*600的,那么二值化后的二维数组是不是就是400*600呢?
--------------------------------------------------------------
是的,用bool类型

#5


这个问题在matlab下是很轻松实现的,在c下,麻烦一下 ,但思路是一样的。

#6


建议你看看《vc++数字图像处理》这本书

#7


   二值话后,设置灰度阈值,只选出黑的部分,联通域分析,点密集的地方就是了。

#8


如果知道圆圈在哪里画的,就直接规定几个区域,然后对图像进行扫描,针对区块扫描,黑的最多的区块,和你指定的区块对比一下就知道哪个被涂黑了

#9


简单的黑白图像的直接遍历所有像素,然后做四邻域联通检测