分享两个OpenCV图像处理与分析的问题

01
问题一:寻找靶心
图一
02
问题二:寻找其中的缺失点
图二
解决方法
01
寻找靶心
仔细观察图一,可以看到两个最直接的是靶心有十字交叉线,而在opencv形态学处理中,支持十字交叉结构元素,所以我们可以先检测两条线,然后获取十字交叉结构,最后对结构进行轮廓分析,获取中心点,即可获得最终的靶心位置,最终寻找到的靶心位置图示如下:
获取水平与垂直线如下:
获取十字交叉线如下:
代码实现如下:
1image = cv.imread(d:/images/zsxq/cross.jpg) 2cv.imshow(input, image) 3gray = cv.cvtcolor(image, cv.color_bgr2gray) 4ret, binary = cv.threshold(gray, 0, 255, cv.thresh_otsu | cv.thresh_binary_inv) 5se1 = cv.getstructuringelement(cv.morph_cross, (50, 1)) 6se2 = cv.getstructuringelement(cv.morph_cross, (1, 50)) 7hline = cv.morphologyex(binary, cv.morph_open, se1) 8vline = cv.morphologyex(binary, cv.morph_open, se2) 9contours, hireachy = cv.findcontours(hline, cv.retr_external, cv.chain_approx_simple)10mask = np.zeros_like(hline)11max = -112index = 013for cnt in range(len(contours)):14    x, y, w, h = cv.boundingrect(contours[cnt])15    if max < w:16        max = w17        index = cnt18cv.drawcontours(mask, contours, index, (255), -1, 8)1920cv.imshow(vline, vline)21contours, hireachy = cv.findcontours(vline, cv.retr_external, cv.chain_approx_simple)22max = -123index = 024for cnt in range(len(contours)):25    x, y, w, h = cv.boundingrect(contours[cnt])26    if max < h and x  15:33        cv.circle(image, (cx + left + 10, cy), 4, (0, 0, 255), 4, 8, 0)3435cv.imshow(test, image)36cv.imwrite(d:/find_miss.png, image)37cv.waitkey(0)38cv.destroyallwindows()


SNS Telecom&IT发布一份新报告 2021年VoLTE服务收入将超2800亿美元
基于物联网的EcoStruxure电网(EcoStruxure Grid)架构
华为副董事长胡厚崑发表了《创新,点亮未来》的主题演讲
传下代iPhone开始量产 9月亮相
《2009手机行业报告》今发布 反映手机行业发展态势
分享两个OpenCV图像处理与分析的问题
Invensense推出IDG-650/ ISZ-650应用游戏摇杆陀螺仪
网管交换机的基本配置方法
物联网患者可以利用物联网技术将实时数据上传服务器
CES2020:英特尔展示Tiger Lake移动处理器和独立GPU
解读博格华纳携多款电气化解决方案
蓝牙5.0室内定位技术原理及优势详解
前Intel新思全球技术高管加入中国芯片IP新锐公司,助推后者全球化部署
电感型升压DCDC转换器的工作过程和工作原理详细说明
如何打造一个理想的5G“身体”、5G“大脑”?
滑动变阻器限流式与分压式的区别分析
基于声发射信号的汽轮机动静摩擦监测
dfrobot 空中飞鼠键盘介绍
关于自适应前照灯系统的性能分析
车队管理正在努力利用物联网技术的全部潜力