-
大小: 4.16MB文件类型: .rar金币: 1下载: 0 次发布日期: 2023-08-10
- 语言: C/C++
- 标签: Wong-Trinder 圆心定位 C++ OPENCV
资源简介
采用基于opencv249的C++编写,Wong-Trinder圆点定位算子
代码片段和文件信息
// CenterLocation.cpp : 定义控制台应用程序的入口点。
#include “stdafx.h“
#include
#include
#include
using namespace std;
using namespace cv;
//1.构造函数m,用于求解p+q阶原点矩mpq
int m_(int iint jint p int q int b)
{
double res = 0;
res += pow(double(i) p) * pow(double(j) q) * b;
return res;
}
//2.构造函数M,用于求解p+q阶中心矩Mpq
int M_(int iint jdouble xdouble yint p int q int b)
{
double res = 0;
res += pow(i-x p) * pow(j-y q) * b;
return res;
}
//3.主函数,对圆心(xy)、圆度r进行求解
int main(void)
{
//3.1读取数据
IplImage * imgSrc = cvLoadImage(“circle1.jpg“);//读取三通道图像数据(RGB)
IplImage* imggray = cvCreateImage(cvGetSize(imgSrc) IPL_DEPTH_8U 1);//申请一段内存
cvCvtColor(imgSrc imggray CV_BGR2GRAY); //灰度化
cvSaveImage(“RGBtoGray1.jpg“imggray);//保存灰度化后的图像文件
int height = imgSrc->height;//获取图像的高和宽
int width = imgSrc->width;
//3.2计算阈值T
CvScalar pixel;//定义数组
int g[100][100]w[100][100];
int min = 256;double Average = 0;
for (int i = 0; i < height; i++)//读取灰度值并存放到数组中
{
for (int j = 0; j < width; j++)
{
pixel = cvGet2D(imgSrc i j);
if(pixel.val[0] < min)
min = int(pixel.val[0]);
Average += pixel.val[0];
g[i][j] = int(pixel.val[0]);
w[i][j] = int(pixel.val[0]);
}
}
Average = Average/(width*height);
double T = (min + Average) * 0.5;//计算出阈值
//3.3图像二值化并计算坐标(xy)
int m00 = 0m10 = 0m01 = 0;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if(g[i][j]>T) g[i][j] = 1;//图像二值化
else g[i][j] = 0;
m00 += m_(ij00g[i][j]);
m10 += m_(ij10g[i][j]);
m01 += m_(ij01g[i][j]);
}
}
double x = m10/(m00 * 1.0)y = m01 / (m00 * 1.0);
//3.4计算Mx、My、圆度r
double M20 = 0M02 = 0M11 = 0M = 0x_=0y_=0;
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
M20 += M_(ijxy20g[i][j]);
M02 += M_(ijxy02g[i][j]);
M11 += M_(ijxy11g[i][j]);
x_ += i * g[i][j] * w[i][j];
y_ += j * g[i][j] * w[i][j];
M += g[i][j] * w[i][j];
}
}
double Mx = (M20 + M02) / 2.0 + sqrt(M11 * M11 + 0.5 * (M20 - M02) * 0.5 * (M20 - M02));
double My = (M20 + M02) / 2.0 - sqrt(M11 * M11 + 0.5 * (M20 - M02) * 0.5 * (M20 - M02));
double r = Mx / My;
//3.5使用Trinder算子计算改进后的xy
x_ *= 1 / M;
y_ *= 1 / M;
//3.6输出结果
cout<<“最小灰度值min=“< cout<<“中间量:“<<“\n“<<“m10=“<< m10 <<“ m01=“<< m01 <<“ m00=“<< m00 <<“\n““M20=“< cout<<“Mx=“<
//3.7保存到文件
ofstream SaveFile(“结果1.txt“);
SaveFile<<“最小灰度值min=“< SaveFile<<“中间量:“<<“\n“<<“m10=“<< m10 <<“ m01=“<< m01 <<“ m00=“<< m00 <<“\n““M20=“<
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3706 2017-10-12 19:58 CenterLocation\CenterLocation\CenterLocation.cpp
文件 4380 2017-10-09 19:07 CenterLocation\CenterLocation\CenterLocation.vcxproj
文件 1318 2017-10-09 19:07 CenterLocation\CenterLocation\CenterLocation.vcxproj.filters
文件 143 2017-10-09 19:07 CenterLocation\CenterLocation\CenterLocation.vcxproj.user
文件 22611 2013-09-26 14:39 CenterLocation\CenterLocation\circle1.jpg
文件 25171 2013-09-26 14:38 CenterLocation\CenterLocation\circle2.jpg
文件 2897 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation.Build.CppClean.log
文件 406 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation.exe.em
文件 472 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation.exe.em
文件 381 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CenterLocation.exe.intermediate.manifest
文件 75 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CenterLocation.lastbuildstate
文件 4043 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CenterLocation.log
文件 412611 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CenterLocation.obj
文件 1179648 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation.pch
文件 0 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation.write.1.tlog
文件 218 2017-10-12 19:38 CenterLocation\CenterLocation\Debug\CenterLocation_manifest.rc
文件 2290 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\cl.command.1.tlog
文件 20826 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CL.read.1.tlog
文件 1020 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\CL.write.1.tlog
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 2854 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 6424 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 1082 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\li
文件 450 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\mt.command.1.tlog
文件 394 2017-10-12 19:58 CenterLocation\CenterLocation\Debug\mt.read.1.tlog
............此处省略28个文件信息
- 上一篇:VC++头文件库
- 下一篇:C语言读取文件数据,写入内存
相关资源
- VC++头文件库
- 使用C++卫星坐标计算
- 数据结构与算法分析——C++语言描述
- 网络五子棋全功能版
- 线程池c++实现
- 清华大学数据结构算法及源代码
- 利用开源库bssQRCodeGenerator.dll创建最最
- 基于C++MFC的聊天程序,C/S模式
- C/C++使用遗传算法解决车辆路径问题
- C++delaunay三角网代码
- 21点游戏MFC程序设计 c++课程设计
- C、C++函数速查手册 (chw版)
- C++综合实验,继承和派生类的设计及
- c++ 串口开发 发送/接受数据demo
- C++ Builder 6程序设计教程.pdf c builder
- c++程序实现c++代码相似度计算
- 成绩查询系统VC++源代码
- 华为C++语言编程规范
- C++项目源代码适合新手练手及参考
- 华西期货上期CTP程序化交易C++高效策
- 多目标跟踪c++代码290025
- OPC UA C++写的服务器和客户端 linux下的
- C++写的即时通讯软件
- Visual C++从入门到精通第三版.pdf28983
- C++Primer plus(第六版)中文版书后编程
- C++ bp神经网络算法
- C++商品销售管理系统(源码)
- VC++实现视频采集
- c/c++源码浏览工具卷2
- VC++ 图像文字提取
评论
共有 条评论