怎么获得图像中目标的中心点坐标

ZealCV 2018-02-27 05:09:14
加精
卫星图像上截取的道路交叉口图像,在只有图像的情况下,请问怎么获得交叉口的交叉点的坐标?
如图,红色的为交叉点


...全文
7836 37 打赏 收藏 转发到动态 举报
写回复
用AI写文章
37 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-05-09
  • 打赏
  • 举报
回复
引用 34 楼 zhao4zhong1 的回复:
请问楼主所谓的交点到底是哪个点?
ZealCV 2018-05-08
  • 打赏
  • 举报
回复
引用 31 楼 goldenhawking 的回复:
做的普适会挺难的。不知道用机器学习有没有可能?从百度地图上获得矢量交叉点的地理坐标。然后获得相同位置的卫星图片。这样可以产生大量的训练样本。以图片为输入,交叉点的坐标为输出,相信应该能够训练出来特定的网络模型。
感谢回答!想做的普适确实难,只能上深度学习,您说的数据采集方式挺好的,应该是可行的,就是不知道怎么怎么去获取矢量交叉点数据,怎么寻找对应的卫星图片
丁劲犇 2018-05-08
  • 打赏
  • 举报
回复
引用 32 楼 u011574296 的回复:
[quote=引用 31 楼 goldenhawking 的回复:] 做的普适会挺难的。不知道用机器学习有没有可能?从百度地图上获得矢量交叉点的地理坐标。然后获得相同位置的卫星图片。这样可以产生大量的训练样本。以图片为输入,交叉点的坐标为输出,相信应该能够训练出来特定的网络模型。
感谢回答!想做的普适确实难,只能上深度学习,您说的数据采集方式挺好的,应该是可行的,就是不知道怎么怎么去获取矢量交叉点数据,怎么寻找对应的卫星图片[/quote] 可以用开源的OpenStreetMap地图,搜索一下 pgRoutings,导入中国的数据即可。这个 openStreetMap地图的数据是开放的,可以下载。导入后,数据库中会有交叉点的信息。具体的数据结构请参考官方维基。我也没实际动手做过哦! 一旦select出交叉点,就可以用 floor(摩卡托坐标 / 2piR * 图幅/256)换算为瓦片,而后在googleMap的API里给定XYZ获得瓦片的图片了。
丁劲犇 2018-05-08
  • 打赏
  • 举报
回复
[quote=引用 32 楼 u011574296 的回复:] OSM的相关信息可以在 https://www.openstreetmap.org/ 查看,在 https://planet.openstreetmap.org/ 下载中国数据,在 http://download.openstreetmap.fr/extracts/asia/china.osm.pbf 导航数据转换与数据库导入: pgRoutings 我的网站里有一些文章,但主要是用于渲染的: http://www.goldenhawking.org:8088/
赵4老师 2018-05-08
  • 打赏
  • 举报
回复
木叶无声 2018-05-08
  • 打赏
  • 举报
回复
可以试一下python
丁劲犇 2018-05-06
  • 打赏
  • 举报
回复
做的普适会挺难的。不知道用机器学习有没有可能?从百度地图上获得矢量交叉点的地理坐标。然后获得相同位置的卫星图片。这样可以产生大量的训练样本。以图片为输入,交叉点的坐标为输出,相信应该能够训练出来特定的网络模型。
zxcdewqa123 2018-04-23
  • 打赏
  • 举报
回复
学习一下
qq_41956496 2018-04-05
  • 打赏
  • 举报
回复
#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/imgproc/imgproc_c.h"

using namespace std;

using namespace cv;

Mat img,smallImg,gray,bw;

vector<Vec4i> hierarchy;

vector<vector<Point> > contours;

int threshval=128;

Rect r;

Rect maxrect,brect;

int idx,n;

const static Scalar colors[15]={

CV_RGB( 0, 0,128),

CV_RGB( 0,128, 0),

CV_RGB( 0,128,128),

CV_RGB(128, 0, 0),

CV_RGB(128, 0,128),

CV_RGB(128,128, 0),

CV_RGB(128,128,128),

CV_RGB(160,160,160),

CV_RGB( 0, 0,255),

CV_RGB( 0,255, 0),

CV_RGB( 0,255,255),

CV_RGB(255, 0, 0),

CV_RGB(255, 0,255),

CV_RGB(255,255, 0),

CV_RGB(255,255,255),

};

Scalar color;

void gamma_correct(Mat& img, Mat& dst, double gamma) {

Mat temp;

CvMat tmp;



img.convertTo(temp, CV_32FC1, 1.0/255.0, 0.0);

tmp=temp;

cvPow(&tmp, &tmp, gamma);

temp.convertTo(dst , CV_8UC1 , 255.0 , 0.0);

}

int main() {

cvNamedWindow("display",1);

img=imread("image.jpg",1);

r.x=img.cols/10;

r.y=img.rows/3;

r.width=img.cols*8/10;

r.height=img.rows*2/3;

smallImg=img(r);

cvtColor(smallImg,gray,CV_BGR2GRAY);

// medianBlur(gray,gray,5);

equalizeHist(gray,gray);

gamma_correct(gray,gray,4.0);

imshow("display",gray);

waitKey(0);



bw=(gray>threshval);

imshow("display",bw);

waitKey(0);



Mat Structure0=getStructuringElement(MORPH_RECT,Size(3,3));

erode(bw,bw,Structure0,Point(-1,-1));

Mat Structure1=getStructuringElement(MORPH_RECT,Size(6,6));

dilate(bw,bw,Structure1, Point(-1,-1));

imshow("display",bw);

waitKey(0);



findContours(bw,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE);

if (!contours.empty()&&!hierarchy.empty()) {

idx=0;

n=0;

vector<Point> approx;

for (;idx>=0;idx=hierarchy[idx][0]) {

color=colors[idx%15];

// drawContours(smallImg,contours,idx,color,1,8,hierarchy);

approxPolyDP(Mat(contours[idx]), approx, arcLength(Mat(contours[idx]), true)*0.005, true);//0.005为将毛边拉直的系数

const Point* p = &approx[0];

int m=(int)approx.size();

polylines(smallImg, &p, &m, 1, true, color);

circle(smallImg,Point(p[0].x,p[0].y),3,color);

circle(smallImg,Point(p[1].x,p[1].y),2,color);

for (int i=2;i<m;i++) circle(smallImg,Point(p[i].x,p[i].y),1,color);

n++;

if (1==n) {

maxrect=boundingRect(Mat(contours[idx]));

} else {

brect=boundingRect(Mat(contours[idx]));

CvRect mr(maxrect),br(brect);

maxrect=cvMaxRect(&mr,&br);

}

}

circle(smallImg,Point(maxrect.x+maxrect.width/2,maxrect.y+maxrect.height/2),2,CV_RGB(255,0,0));

}

imshow("display",smallImg);

waitKey(0);

cvDestroyWindow("display");

return 0;

}
qq_41956496 2018-04-05
  • 打赏
  • 举报
回复
#include "opencv2/highgui/highgui.hpp"

#include "opencv2/imgproc/imgproc.hpp"

#include "opencv2/imgproc/imgproc_c.h"

using namespace std;

using namespace cv;

Mat img,smallImg,gray,bw;

vector<Vec4i> hierarchy;

vector<vector<Point> > contours;

int threshval=128;

Rect r;

Rect maxrect,brect;

int idx,n;

const static Scalar colors[15]={

CV_RGB( 0, 0,128),

CV_RGB( 0,128, 0),

CV_RGB( 0,128,128),

CV_RGB(128, 0, 0),

CV_RGB(128, 0,128),

CV_RGB(128,128, 0),

CV_RGB(128,128,128),

CV_RGB(160,160,160),

CV_RGB( 0, 0,255),

CV_RGB( 0,255, 0),

CV_RGB( 0,255,255),

CV_RGB(255, 0, 0),

CV_RGB(255, 0,255),

CV_RGB(255,255, 0),

CV_RGB(255,255,255),

};

Scalar color;

void gamma_correct(Mat& img, Mat& dst, double gamma) {

Mat temp;

CvMat tmp;



img.convertTo(temp, CV_32FC1, 1.0/255.0, 0.0);

tmp=temp;

cvPow(&tmp, &tmp, gamma);

temp.convertTo(dst , CV_8UC1 , 255.0 , 0.0);

}

int main() {

cvNamedWindow("display",1);

img=imread("image.jpg",1);

r.x=img.cols/10;

r.y=img.rows/3;

r.width=img.cols*8/10;

r.height=img.rows*2/3;

smallImg=img(r);

cvtColor(smallImg,gray,CV_BGR2GRAY);

// medianBlur(gray,gray,5);

equalizeHist(gray,gray);

gamma_correct(gray,gray,4.0);

imshow("display",gray);

waitKey(0);



bw=(gray>threshval);

imshow("display",bw);

waitKey(0);



Mat Structure0=getStructuringElement(MORPH_RECT,Size(3,3));

erode(bw,bw,Structure0,Point(-1,-1));

Mat Structure1=getStructuringElement(MORPH_RECT,Size(6,6));

dilate(bw,bw,Structure1, Point(-1,-1));

imshow("display",bw);

waitKey(0);



findContours(bw,contours,hierarchy,RETR_EXTERNAL,CHAIN_APPROX_SIMPLE);

if (!contours.empty()&&!hierarchy.empty()) {

idx=0;

n=0;

vector<Point> approx;

for (;idx>=0;idx=hierarchy[idx][0]) {

color=colors[idx%15];

// drawContours(smallImg,contours,idx,color,1,8,hierarchy);

approxPolyDP(Mat(contours[idx]), approx, arcLength(Mat(contours[idx]), true)*0.005, true);//0.005为将毛边拉直的系数

const Point* p = &approx[0];

int m=(int)approx.size();

polylines(smallImg, &p, &m, 1, true, color);

circle(smallImg,Point(p[0].x,p[0].y),3,color);

circle(smallImg,Point(p[1].x,p[1].y),2,color);

for (int i=2;i<m;i++) circle(smallImg,Point(p[i].x,p[i].y),1,color);

n++;

if (1==n) {

maxrect=boundingRect(Mat(contours[idx]));

} else {

brect=boundingRect(Mat(contours[idx]));

CvRect mr(maxrect),br(brect);

maxrect=cvMaxRect(&mr,&br);

}

}

circle(smallImg,Point(maxrect.x+maxrect.width/2,maxrect.y+maxrect.height/2),2,CV_RGB(255,0,0));

}

imshow("display",smallImg);

waitKey(0);

cvDestroyWindow("display");

return 0;

}
西瓜无籽 2018-04-03
  • 打赏
  • 举报
回复
利用直线检测算法,获取直线参数,进而获取交点;
  • 打赏
  • 举报
回复
学到了新知识,多谢大神
ZealCV 2018-03-31
  • 打赏
  • 举报
回复
引用 22 楼 llxxhm 的回复:
[quote=引用 8 楼 u011574296 的回复:] [quote=引用 7 楼 zhao4zhong1 的回复:] 既然是红色的交叉点,当然是转换为HSL后,取H(0..359)在比如0..19或340..359范围内的像素了。
红色是我标识出来的,本来没有[/quote] 是要检测红点在图点的坐标吧?如果我没理解错,类似的事情我就干过,比如检测图中的香烟,并标出位置[/quote] 嗯嗯,就是您理解的那样,检测红点在图点的坐标,请问您怎么做的呢
QQ515311445 2018-03-31
  • 打赏
  • 举报
回复
引用 8 楼 u011574296 的回复:
[quote=引用 7 楼 zhao4zhong1 的回复:] 既然是红色的交叉点,当然是转换为HSL后,取H(0..359)在比如0..19或340..359范围内的像素了。
红色是我标识出来的,本来没有[/quote] 是要检测红点在图点的坐标吧?如果我没理解错,类似的事情我就干过,比如检测图中的香烟,并标出位置
Jossing45 2018-03-28
  • 打赏
  • 举报
回复
赵4老师 2018-03-28
  • 打赏
  • 举报
回复
#10恐怕是目前为止全球第一个中文版dlib机器学习导图了吧。
qq_41912044 2018-03-27
  • 打赏
  • 举报
回复
这么多大牛,学习了
sunny7862632 2018-03-27
  • 打赏
  • 举报
回复
深度学习搞起,只需要标注数据就能出结果。
tanta 2018-03-26
  • 打赏
  • 举报
回复
图像识别,这是一门大学问啊
赵4老师 2018-03-26
  • 打赏
  • 举报
回复
道路交叉口这个概念太智能了,比如: 羊肠小道、村级公路、人行道、自行车专用道、国道、高速公路的辅路、主路、匝道、立交桥、……、普通铁路、高速铁路、城铁道路、地铁道路、磁悬浮列车道路、…… 及其它们之间任意两者的交叉处! 够楼主发扬愚公移山精神子子孙孙无穷尽地研究几十辈了!!!
加载更多回复(15)
随着计算机视觉的发展,目标检测作为深度学习各分支的主要前提与支柱也取得了突飞猛进的进步。其应用领域之广,可以说人工智能凡是和图像有关的领域,都离不开目标检测的支持。即便在深度学习的其他细分领域,目标检测器的性能会直接影响该项目的最终效果。目标检测涉及领域及分支广、就业面宽,并且目前市场.对其需要是供小于求。尽管目标检测作为深度学习的核心支柱已经有-段的时间,但全网很少有系统性从零到最新(2020)介绍目标检测的相关课程。目前全网在这个领域的教学课程成碎片化和过时化,且大多容易从传统的图像处理直接进入到深度学习的方法,出现断层,让学生产生迷惑并 且难以快速入门。本课程沿着目标检测发展的脉络,一步- -步向下过渡,探索其关联,由浅入深地让学员快速掌握。本课程作为集训营CV方向的先导课,将直接从深度学习.入手,从基础的目标识别,过渡到目标检测的三个分支,再. 随着需求的变换,过度到目前最新目标检测器(2020) 。同时从项目实战出发,阐明如何设计目标检测主干网络,选 择合适的损失函数、激励函数、优化器,图像增广等- -系列使用方法。课程在由浅入深讲明基础理论知识,刻画各时期主流模型之后,更重点着墨于现阶段性能强劲的主流算法, 助学生一臂之力。

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧