“横平竖直”进行连线+将相邻框进行合并

一.横平竖直”进行连线

解法1.将一些坐标点按照x相等,y相等连起来

解法1.根据 x或y总有一个相等的,用np.sum来找出和为1的点,然后在连起来,存在重复连线的问题.

import numpy as npcoord = np.array([[10, 60],[10, 20],[20, 20],[40, 40],[40, 60],[20, 40]])img = np.zeros((100, 100))h, w = coord.shapefor i in range(h):index = np.sum(np.array(coord[i]).reshape(-1, 2) == coord, axis=-1)y = np.where(index == 1)for point in coord[y]:cv2.line(img, (coord[i][0], coord[i][1]), (point[0], point[1]), color=(255,255,255), thickness=3)cv2.imshow('img', img)cv2.waitKey(0)

解法2.先连x相等,在连y相等的

def coord_sort_ind(x,y):#按照x,y来排序ind = np.lexsort((y.tolist(), x.tolist())) # Sort by x, then by yreturn ind
def simple_line_():import numpy as npcoord = np.array([[10, 60],[10, 20],[20, 20],[40, 40],[40, 60],[20, 40]])# 按照先X后Y排的序ind = coord_sort_ind(coord[:, 0], coord[:, 1])coord_X=coord[ind]print(coord_X)# # 按照先Y后X排的序ind = coord_sort_ind(coord[:, 1], coord[:, 0])print(ind)coord_Y = coord[ind]print(coord_Y)img = np.zeros((100, 100))h, w = coord.shape# x想等的连接for i in range(0, h, 2):cv2.line(img, (coord_X[i][0], coord_X[i][1]), (coord_X[i + 1][0], coord_X[i + 1][1]), color=(255, 255, 255),thickness=3)# y想等的连接cv2.line(img, (coord_Y[i][0], coord_Y[i][1]), (coord_Y[i + 1][0], coord_Y[i + 1][1]), color=(255, 255, 255),thickness=3)cv2.imshow('img', img)cv2.waitKey(0)

二.将相邻框进行合并

目前解法是将两个相邻的框合并,得到大框在继续合并,算法还需要优化成一次性合并成功

import numpy as np
import cv2
def get_cluster(points,x_dis,y1_dis):points = points[points[:, 0].argsort()]x1,y1,x2,y2=points[:,0],points[:,1],points[:,-2],points[:,-1]#只对竖值框进行合并操作points=points[np.where(x2-x1<y2-y1)[0]]# points=points[:13]# print('points:',points)# # debug to show# for i,point in enumerate(points):#         font = cv2.FONT_HERSHEY_SIMPLEX#         cv2.putText(img, str(i), (point[0], point[1]), font, 2.5, (255, 255, 255), 2)#         cv2.rectangle(img, (point[0], point[1]), (point[-2], point[-1]), color=(255, 255, 255), thickness=3)# cv2.imwrite('img_rect.jpg', img)# print(points.shape[0])cluster = []while points.shape[0]:temp=[]# print('points:',points)#x1-x2<index_x = np.where(abs(points[0][-2]-points[:, 0]) < x_dis)[0]# print('index_x:',index_x)# if len(index_x):#     #y1-y1<index_y1 = np.where(abs(points[0][1]-points[:, 1]) < y1_dis)[0]# print('index_y: ',index_y1)#y2-y2<hindex_y2 = np.where(abs(points[0][-1]-points[:, -1]) < (points[:, -1]-points[:, 1]))[0]# print('index_y2:',index_y2)# common_index=[i for i in index_x  if i in index_y]common_index = list(set(index_x) & set(index_y1) & set(index_y2))# print('common_index:',common_index)# print('common_index:',common_index)if len(common_index):temp.append(points[0])temp.extend(points[common_index])points = np.delete(points, obj=common_index+[0], axis=0)else:temp.append(points[0])points=points[1:]cluster.append(temp)# # print(points)# print('cluster:',cluster)# print(len(cluster))# for i in range(len(cluster)):#     every_cluster=np.array(cluster[i]).reshape(-1,4)#     print('every_cluster:',every_cluster)#     for point in every_cluster:#         font = cv2.FONT_HERSHEY_SIMPLEX#         cv2.putText(img, str(i), (point[0],point[1]), font, 2, (255, 255, 255), 2)#         cv2.rectangle(img,(point[0],point[1]),(point[-2],point[-1]),color=(255,255,255),thickness=3)# cv2.imwrite('img_rect_clu.jpg',img)return cluster
def fix_bbox_point(cluster):points=[]for i,evry_cluster in enumerate(cluster):every_cluster = np.array(cluster[i]).reshape(-1, 4)x1,y1,x2,y2=np.min(every_cluster[:,0]),np.min(every_cluster[:,1])\,np.max(every_cluster[:,-2]),np.max(every_cluster[:,-1])points.append([x1,y1,x2,y2])return np.array(points)def union_bboxs(points):cluster_first = get_cluster(points, x_dis=50, y1_dis=300)# print('===cluster=====')# print(len(cluster_first))first_bboxs = fix_bbox_point(cluster_first)cluster_second = get_cluster(first_bboxs, x_dis=50, y1_dis=300)# print('===cluster=====')# print(len(cluster_second))second_bboxs = fix_bbox_point(cluster_second)cluster_third = get_cluster(second_bboxs, x_dis=50, y1_dis=400)# print('===cluster=====')# print(len(cluster_third))third_bboxs = fix_bbox_point(cluster_third)return third_bboxsif __name__ == '__main__':# points = np.array([[1264, 1480, 1346, 1790],#                    [2278, 1873, 2380, 2542],#                    [3209, 2279, 3286, 2599],#                    [2195, 3468, 2277, 3772],#                    [844, 1087, 924, 1399],#                    [92, 876, 181, 1327],#                    [951, 306, 1033, 596],#                    [1652, 299, 1729, 604],#                    [2196, 1957, 2270, 2535],#                    [916, 4251, 994, 4563],#                    [1131, 1915, 1214, 2505],#                    [1042, 265, 1116, 532],#                    [2124, 2036, 2195, 2603],#                    [934, 1054, 1003, 1258],#                    [1522, 3561, 1585, 4086],#                    [999, 4220, 1068, 4422],#                    [2404, 586, 2516, 1209],#                    [1452, 3618, 1528, 4151],#                    [1354, 1449, 1425, 1655],#                    [1583, 3532, 1683, 4109],#                    [1207, 1525, 1256, 1792],#                    [2144, 3511, 2191, 3779],#                    [3162, 2319, 3205, 2549],#                    [787, 1124, 837, 1395],#                    [896, 339, 944, 606],#                    [1741, 260, 1813, 467],#                    [219, 3230, 330, 3785],#                    [1424, 2675, 1506, 2818],#                    [2528, 538, 2714, 1709],#                    [2287, 664, 2394, 1596],#                    [231, 1703, 428, 2598],#                    [287, 248, 473, 1638],#                    [186, 280, 265, 1025],#                    [1670, 3480, 1756, 3852],#                    [1754, 2277, 1836, 2431],#                    [3284, 2241, 3360, 2455],#                    [2823, 1662, 3163, 1730],#                    [2897, 2852, 3285, 2946],#                    [2972, 2700, 3049, 2790]])points=np.array([[700,1888,  789, 2199],[1918, 1487, 2000, 1798],[1045,  683, 1129,  995],[2867,  279, 2975,  958],[1929, 3088, 2012, 3393],[1006,  272, 1087,  583],[2476, 3089, 2560, 3396],[ 820, 3094,  904, 3406],[2532, 3499, 2616, 3810],[1335, 1080, 1411, 1378],[2204, 2283, 2288, 2587],[1138,  644, 1213,  975],[1611, 1884, 1695, 2196],[2823, 2283, 2906, 2603],[ 773, 2286,  853, 2606],[1562,  262, 1642,  585],[2458, 1883, 2540, 2196],[1749, 3491, 1831, 3803],[ 634, 1266,  715, 1785],[1646,  236, 1722,  515],[ 988, 3889, 1060, 4221],[ 725, 1167,  836, 1743],[2592,  455, 2703, 1365],[2721,  375, 2853, 1289],[ 846, 1104,  938, 1481],[ 857, 2255,  935, 2583],[1419, 1043, 1494, 1316],[1707, 2310, 1814, 3001],[1327, 3046, 1405, 3387],[1244, 3081, 1327, 3404],[1814, 2264, 1903, 2656],[2543, 1844, 2617, 2053],[2845, 3894, 2918, 4215],[2147, 2330, 2197, 2559],[2402, 1922, 2452, 2198],[1058, 3860, 1122, 4065],[3308, 1779, 3396, 2183],[2293, 2248, 2370, 2454],[1857, 1531, 1908, 1760],[1697, 3535, 1745, 3803],[1189, 3133, 1236, 3367],[2419, 3135, 2468, 3360],[1873, 3124, 1923, 3400],[ 988,  719, 1038,  995],[2480, 3539, 2529, 3809],[2017, 3057, 2083, 3278],[2095, 2368, 2138, 2598],[ 766, 3135,  815, 3409],[1559, 1964, 1607, 2160],[1504, 1966, 1550, 2202],[2913, 2248, 2996, 2455],[ 766, 4318,  838, 4580],[1802, 1571, 1848, 1797],[ 374,  801,  457, 1032],[ 637, 1926,  690, 2164],[1636, 2441, 1708, 2998],[ 964,  353, 1012,  549],[3243,  290, 3389, 1431],[1869, 3963, 1952, 4206],[3131, 2120, 3215, 2800],[2858, 4314, 2934, 4593],[2802, 3939, 2844, 4189],[ 484,  716,  570,  955],[2913, 3860, 2988, 4126],[ 330,  645,  566,  717]])# print(points[30:33])# points = points[12:21]img = np.zeros((5000, 4000))cluster_first=get_cluster(points,x_dis=50,y1_dis=300)print('===first cluster=====')print(len(cluster_first))first_bboxs=fix_bbox_point(cluster_first)print('===second cluster===')cluster_second = get_cluster(first_bboxs, x_dis=50, y1_dis=400)print(len(cluster_second))second_bboxs = fix_bbox_point(cluster_second)# #debug# for i,point in enumerate(first_bboxs):#     font = cv2.FONT_HERSHEY_SIMPLEX#     cv2.putText(img, str(i), (point[0], point[1]), font, 2.5, (255, 255, 255), 2)#     cv2.rectangle(img, (point[0], point[1]), (point[-2], point[-1]), color=(255, 255, 255), thickness=3)# cv2.imwrite('img_rect_first_bbx.jpg', img)### # debug# for i, point in enumerate(second_bboxs):#     font = cv2.FONT_HERSHEY_SIMPLEX#     cv2.putText(img, str(i), (point[0], point[1]), font, 2.5, (255, 255, 255), 2)#     cv2.rectangle(img, (point[0], point[1]), (point[-2], point[-1]), color=(255, 255, 255), thickness=3)# cv2.imwrite('img_rect_second_bbx.jpg', img)cluster_third = get_cluster(second_bboxs, x_dis=50, y1_dis=400)print('===cluster=====')print(len(cluster_third))third_bboxs = fix_bbox_point(cluster_third)# debugfor i, point in enumerate(third_bboxs):font = cv2.FONT_HERSHEY_SIMPLEXcv2.putText(img, str(i), (point[0], point[1]), font, 2.5, (255, 255, 255), 2)cv2.rectangle(img, (point[0], point[1]), (point[-2], point[-1]), color=(255, 255, 255), thickness=3)cv2.imwrite('img_rect_third_bbx.jpg', img)

合并前: 

合并后:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493257.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文看透汽车芯片!巨头布局技术路线全解密【附下载】| 智东西内参

来源&#xff1a;智东西摘要&#xff1a;一文看透汽车芯片&#xff01;巨头布局技术路线全解密智能驾驶涉及人机交互、视觉处理、智能决策等&#xff0c;核心是 AI 算法和芯片。伴随汽车电子化提速&#xff0c;汽车半导体加速成长&#xff0c;2017 年全球市场规模 288 亿美元&a…

详细介绍软件架构设计的三个维度

如果你对项目管理、系统架构有兴趣&#xff0c;请加微信订阅号“softjg”&#xff0c;加入这个PM、架构师的大家庭 架构设计是一个非常大的话题&#xff0c;不管写几篇文章&#xff0c;接触到的始终只是冰山一角&#xff0c;更多的是实践中去体会。这篇文章主要介绍面向对象OO、…

中国智能语音行业研究

报告来源&#xff1a;中信证券作者&#xff1a;刘雯蜀 杨泽原 张若海智能语音作为人机交互的新型方式&#xff0c;有望大规模推广&#xff0c;中国市场是更适合语音交互的市场。2017年中国人工智能市场规模达约220亿元&#xff0c;智能语音占中国人工智能市场份额的22%&#…

SQL2012 附加数据库提示5120错误解决方法

在win8.1 x64系统上使用sql2012进行附加数据库&#xff08;包括在x86系统正在使用的数据库文件&#xff0c;直接拷贝附加在X64系统中&#xff09;时&#xff0c;提示无法打开文件&#xff0c;5120错误。 这个错误是因为没有操作权限&#xff0c;所以附加的时候出错&#xff0c;…

pytorch利用rnn通过sin预测cos 利用lstm预测手写数字

一.利用rnn通过sin预测cos 1.首先可视化一下数据 import numpy as np from matplotlib import pyplot as plt def show(sin_np,cos_np):plt.figure()plt.title(Sin and Cos, fontsize18)plt.plot(steps, sin_np, r-, labelsin)plt.plot(steps, cos_np, b-, labelcos)plt.lege…

高德纳咨询公司(Gartner)预测:2019年七大人工智能科技趋势

来源&#xff1a;创新研究摘要&#xff1a;人工智能技术对我们的工作环境、工作种类等等正在产生日益深刻的影响&#xff0c;其结果或好或坏都有可能。为应对这种改变&#xff0c;特别是负面的变化&#xff0c;高德纳咨询公司&#xff08;Gartner&#xff09;于2018年12月13日发…

美爆!《自然》公布2018年19张最震撼的科学图片

来源&#xff1a;前瞻网 摘要&#xff1a;2018年注定将载入科学史册&#xff1a;气候上&#xff0c;从加利福尼亚烧到开普敦的致命野火和极端干旱、历史罕见;医学上&#xff0c;克隆和成像技术的进步既带来希望&#xff0c;也产生了争议;生物上&#xff0c;一系列事件让人们意识…

python实现Trie 树+朴素匹配字符串+RK算法匹配字符串+kmp算法匹配字符串

一.trie树应用&#xff1a; 相应leetcode 常用于搜索提示&#xff0c;如当输入一个网址&#xff0c;可以自动搜索出可能的选择。当没有完全匹配的搜索结果&#xff0c;可以返回前缀最相似的可能。 例如三个单词app, apple, add,我们按照以下规则创建了一颗Trie树.对于从树的根…

天才也勤奋!DeepMind哈萨比斯自述:领导400名博士向前,每天工作至凌晨4点

来源&#xff1a;量子位你见过凌晨4点的伦敦吗&#xff1f;哈萨比斯天天见。这位DeepMind创始人、AlphaGo之父&#xff0c;一直是全球赞颂的当世天才&#xff0c;但每天要到凌晨4点&#xff0c;才能睡下。这是哈萨比斯最新采访中透露的作息时间&#xff0c;他告诉《星期日泰晤士…

RNN知识+LSTM知识+encoder-decoder+ctc+基于pytorch的crnn网络结构

一&#xff0e;基础知识&#xff1a; 下图是一个循环神经网络实现语言模型的示例&#xff0c;可以看出其是基于当前的输入与过去的输入序列&#xff0c;预测序列的下一个字符&#xff0e; 序列特点就是某一步的输出不仅依赖于这一步的输入&#xff0c;还依赖于其他步的输入或输…

利用flask写的接口(base64, 二进制, 上传视频流)+异步+gunicorn部署Flask服务+多gpu卡部署

一.flask写的接口 1.1 manage.py启动服务(发送图片base64版) 这里要注意的是用docker的话,记得端口映射 #coding:utf-8 import base64 import io import logging import picklefrom flask import Flask, jsonify, request from PIL import Image from sklearn import metric…

2018中国自动驾驶市场专题分析

来源&#xff1a;智车科技未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&#…

python写日志

需要再加入按照日期生成日志 #coding:utf-8 import logging import logging.handlers class Logger:logFile def __init__(self, logFile):self.logFile logFileself.logger logging.getLogger(mylogger)self.logger.setLevel(logging.INFO)rf_handler logging.handlers.…

MIT科学家Dimitri P. Bertsekas最新2019出版《强化学习与最优控制》(附书稿PDF讲义)...

来源&#xff1a;专知摘要&#xff1a;MIT科学家Dimitri P. Bertsekas今日发布了一份2019即将出版的《强化学习与最优控制》书稿及讲义&#xff0c;该专著目的在于探索这人工智能与最优控制的共同边界&#xff0c;形成一个可以在任一领域具有背景的人员都可以访问的桥梁。REINF…

yolov3 anchors用kmeans聚类出先验框+anchor宽高比分析

一&#xff0e;yolov v3聚类出框 # -*- coding: utf-8 -*- import numpy as np import random import argparse import os# # 参数名称 # parser argparse.ArgumentParser(description使用该脚本生成YOLO-V3的anchor boxes\n) # parser.add_argument(--input_annotation_txt…

Geoff Hinton:全新的想法将比微小的改进更有影响力

来源&#xff1a;AI科技评论摘要&#xff1a;日前&#xff0c;WIRED 对 Hinton 进行了一次专访&#xff0c;在访谈中&#xff0c;WIRED 针对人工智能带来的道德挑战和面临的挑战等问题进行了提问&#xff0c;以下为谈话内容。“作为一名谷歌高管&#xff0c;我认为在公开场合抱…

修改TOMCAT服务器图标为应用LOGO

在tomcat下部署应用程序&#xff0c;运行后&#xff0c;发现在地址栏中会显示tomcat的小猫咪图标。有时候&#xff0c;我们自己不想显示这个图标&#xff0c;想换成自己定义的的图标&#xff0c;那么按如下方法操作即可&#xff1a; 参考网上的解决方案&#xff1a;1、将$TOMCA…

python连接mysql的一些基础知识+安装Navicat可视化数据库+flask_sqlalchemy写数据库

一&#xff0e;mysql基础知识 &#xff11;&#xff0e;connect连接数据库 import pymysqldef get_conn():conn pymysql.connect(hostxxx.xxx.xxx.xxx, port3306, userroot, passwd, dbnewspaper_rest) # db:表示数据库名称return conn &#xff12;&#xff0e;创建表 im…

工业互联网平台创新发展白皮书(2018)

来源&#xff1a;走向智能论坛摘要&#xff1a;近日&#xff0c;在“2018年产业互联网与数据经济大会——首届工业互联网平台创新发展暨两化融合推进会”上&#xff0c;国家工业信息安全发展研究中心尹丽波主任发布并解读了《工业互联网平台创新发展白皮书&#xff08;2018&…

迭代器模式和组合模式混用

迭代器模式和组合模式混用 前言 园子里说设计模式的文章算得上是海量了&#xff0c;所以本篇文章所用到的迭代器设计模式和组合模式不提供原理解析&#xff0c;有兴趣的朋友可以到一些前辈的设计模式文章上学学&#xff0c;很多很有意思的。在Head First 设计模式这本书中&…