如何获取图像中物体坐标?

 我来答
DoramiHe
2018-07-29 · 知道合伙人互联网行家
DoramiHe
知道合伙人互联网行家
采纳数:25332 获赞数:59543
2011年中山职业技术学院毕业,现担任毅衣公司京东小二

向TA提问 私信TA
展开全部
首先,通过图像处理算法,找出物体在图片上的坐标
然后,将图片坐标转换为实际坐标

没有通用算法,就算你切一个人脑子放在那里负责图像识别,它也识别不出它从来没听说过的东西
原理上最简单的方法是模板比对,就是在一个较大图像里找一个较小图像的位置角度,复杂一点的就是找出你要找的东西的一类特征,例如几个亮点构成特定角度,就在图像内找出所有亮点判断哪几个亮点构成该特定角度等等
halcon和opencv不用写算法代码,这些图像处理算法库都是把基本的算法给你写好了,用它们基本上就是把这些基本的算法组合搭配
东莞大凡
2024-08-07 广告
OpenCV标定板是东莞市大凡光学科技有限公司在相机标定中常用的工具。它通常由黑白格点按一定规则排列在平面上组成,如棋盘格或圆形格等。在相机标定时,将标定板置于不同位置和姿态下拍摄图像,利用OpenCV库中的函数检测标定板上的角点或圆心,进... 点击进入详情页
本回答由东莞大凡提供
heart阿飞55
2018-07-29 · TA获得超过1086个赞
知道大有可为答主
回答量:3030
采纳率:82%
帮助的人:558万
展开全部
效果图:

代码:
// FindGravity.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include "cv.h" #include "highgui.h" #include core/core.hpp> #include highgui/highgui.hpp>#pragma comment(lib,"opencv_core2410d.lib") #pragma comment(lib,"opencv_highgui2410d.lib") #pragma comment(lib,"opencv_imgproc2410d.lib") using namespace std;using namespace cv;void FindGravity(){ }/** 计算二值图像的重心* @param[in] src 输入的待处理图像* @param[out] center 重心坐标* @retval 0 操作成功* @retval -1 操作失败* @note 输入图像是二值化图像* @note xc=M10/M00, yc=M01/M00, 其中 Mx_order,y_order=SUMx,y(I(x,y)*x^x_order*y^y_order) */static int aoiGravityCenter(IplImage *src, CvPoint ¢er){//if(!src)// return GRAVITYCENTER__SRC_IS_NULL;double m00, m10, m01;CvMoments moment;cvMoments( src, &moment, 1);m00 = cvGetSpatialMoment( &moment, 0, 0 );if( m00 == 0)return 1;m10 = cvGetSpatialMoment( &moment, 1, 0 );m01 = cvGetSpatialMoment( &moment, 0, 1 );center.x = (int) (m10/m00);center.y = (int) (m01/m00);return 0;}IplImage* binary_image(IplImage* src){ // cvThreshold( src, src, 100, 255, CV_THRESH_BINARY );//100 is the thredhold IplImage* one_channel = cvCreateImage(cvSize(src->width,src->height),IPL_DEPTH_8U,0); for(int y = 0;y src->height;y++) { char *ptr= src->imageData + y * src->widthStep; char *p_one_channel = one_channel->imageData + y * one_channel->widthStep; for(int x = 0;x src->width;x++) { int temp = ptr[3*x]; if (temp != 0)//不是黑色也就是说不是背景 { p_one_channel[x] = 255;//设置为白色 } else { p_one_channel[x] = 0; } //ptr[3*x]= //ptr[3*x+1]= //ptr[3*x+2]=; } } return one_channel;}int _tmain(int argc, _TCHAR* argv[]){ string str_name = "seg_right.bmp"; IplImage* src; IplImage* draw = cvLoadImage(str_name.c_str(),1);//绘制重心的图像 if ((src = cvLoadImage(str_name.c_str(),1))!=0) { //src = binary_image(src); cvNamedWindow( "binary image", 1 ); cvShowImage( "binary image", binary_image(src) ); } CvPoint xy; aoiGravityCenter(binary_image(src),xy); cout<<xy.x<<endl; cout<<xy.y<<endl; cvCircle(draw,cvPoint(xy.x,xy.y),3,CV_RGB(0,0,255),5); cvNamedWindow( "重心", 1 ); cvShowImage( "重心", draw ); cvWaitKey(0); return 0;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式