我的目的就是将matlab中代码还原成opencv中的代码了

该方法的主要原理是:在图像中的每一行求得最大值,然后减去一个阈值。

在循环判断每一行中大于刚才减去的值。

在用灰度重心法提取;

#include <opencv2/opencv.hpp>
#include <iostream>
#include "opencv2/imgproc/imgproc.hpp"
#include <math.h>
#include <stdio.h>using namespace cv;
using namespace std;Mat org, dst, image, tmp, zhongxin;
vector<float> rr;
vector<float> pointweizhi;
vector<float> ee;
vector<float> pointweizhi1;
int num = 0;//void main(int argc, char** argv)
//{
//  org = imread("hh.bmp",0);
//  org.copyTo(image);
//  threshold(image, image, 50, 255, THRESH_TRUNC);
//  int rows = image.rows;
//  int cols = image.cols;
//  printf("rows  : %d     \n", rows);
//  for (int i = 0; i < rows; i++)
//  {
//      float xiangshuzhi = image.ptr<uchar>(i)[0];; //一开始用的int和double
//      printf("xiangshuzhi  : %d     \n", xiangshuzhi);
//      float zhongjianzhi;
//      float yuzhi = 5.0;
//      float sum0 = 0;
//      float sum1 = 0;
//
//      for (int j = 0; j < cols; j++)
//      {
//          float current = image.ptr<uchar>(i)[0];
//
//          if (current > xiangshuzhi)
//          {
//              xiangshuzhi = current;
//
//          }
//      }
//      pointweizhi1.push_back(xiangshuzhi);
//      zhongjianzhi = xiangshuzhi - 5;
//
//      printf("zhongjianzhi  : %d     \n", zhongjianzhi);
//
//      for (int j = 0; j < cols; j++)
//      {
//      float current = image.at<uchar>(j, i);
//      if ( current > zhongjianzhi)
//      {
//      num++;
//      ee.push_back(current);
//      pointweizhi.push_back(j);
//      }
//      }
//      for (int g = 1; g<ee.size(); g++)
//      {
//      sum0 = sum0 + pointweizhi[g] * ee[g];
//      sum1 = sum1 + ee[g];
//      }
//      pointweizhi1.push_back(float(sum0 / sum1));
//  }
//
//
//}void main(int argc, char** argv)
{
Mat srcimg;
srcimg = imread("testtt.png");
Mat grayimg;
cvtColor(srcimg, grayimg, CV_BGR2GRAY);
//GaussianBlur(grayimg, grayimg, Size(0, 0), 6, 6);
//遍历每一列
float x0 = 0;
for (int i = 0; i < grayimg.rows; i++)
{float sum_value = 0;float sum_valuecoor = 0;vector<float>current_value;vector<float>current_coordinat;uchar mean;mean = grayimg.at<uchar>(i, 0);printf("mean1  : %d     \n", mean);for (int j = 0; j < grayimg.cols; j++){if (grayimg.at<uchar>(i, j) > mean){mean = grayimg.at<uchar>(i, j);}}printf("mean2  : %d     \n", mean);for (int j = 0; j < grayimg.rows; j++) {uchar current = grayimg.at<uchar>(i, j);//将符合阈值的点灰度值和坐标存入数组if (current > mean-0.1) {current_value.push_back(current);current_coordinat.push_back(j);}}//计算灰度重心for (int k = 0; k < current_value.size(); k++) {sum_valuecoor += current_value[k] * current_coordinat[k];sum_value += current_value[k];}float x = sum_valuecoor / sum_value;x0 = x;circle(srcimg, Point(x, i), 1, Scalar(0, 0, 255), -1, 8);current_value.clear();current_coordinat.clear();
}
imshow("srcimg", srcimg);
waitKey(0);
}

这里有个问题就是,在读取 图像的某个像素的值的时候。

uchar xxx=grayimg.at<uchar>(i, j);

(不然会出现像素值非常离谱的现象,这个数据格式我还不是很了解,还是有很多问题。)

实习(光条中心提取,灰度重心法)相关推荐

  1. Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵)

    Steger算法(Line_Gauss)-光条中心线提取(基于Hessian矩阵) 算法背景介绍 Hessian 矩阵与泰勒多项式 关于求t 导数与中心点.亚像素点 高斯函数作用 文献 算法背景介绍 ...

  2. 激光条纹中心提取——灰度中心法python

    激光条纹中心提取--灰度中心法python 灰度中心法 python代码 灰度中心法 灰度重心法是根据每行光条纹横截面内的灰度分布特征逐行进行处理,通过在行坐标的方向上,逐行计算提取光条纹区域的灰度重 ...

  3. 中线提取算法_综述|线结构光中心提取算法研究发展

    摘 要: 线结构光扫描是三维重建领域的关键技术.光条纹中心提取算法是决定线结构光三维重建精度以及光条纹轮廓定位准确性的重要因素.本文详细阐述了光条纹中心提取算法的理论基础及发展历程,将现有算法分为三类 ...

  4. 传统激光条纹中心提取算法研究现状

    传统激光条纹中心提取算法研究现状 前言 一.边缘法 二.中心法 三.阈值法 四. 细化法 五.极值法 六.灰度重心法 七.方向模板 八.曲线拟合法 九.Steger 前言 光条中心提取是将宽度大于1的 ...

  5. 复杂环境下结构光光条中心的几种提取方法

    目录 前言 1.基于相位一致性提取光条中心 2.基于图像多尺度分析提取光条中心 2.1提取初始光条中心 2.2多尺度光条中心提取 2.2.1规范化算子. 2.2.2提取光条中心坐标. 3.融合传统方法 ...

  6. android o 结构光流程,结构光光条中心的提取算法.pdf

    结构光光条中心的提取算法 2010年 8月 沈阳航空工业学院学报 A ug. 2010 第 27卷 第 4期 Journa l o f Shenyang Institute of A e ronaut ...

  7. 激光条纹中心提取——方法总结

    激光条纹中心提取--方法总结 算法 优势 缺点 边缘法 处理速度快:适用于精度要求低的大型物体测量 存在很大误差:要求图像质量较好且结构光特性较高 中心法 适用于条纹质量好且形状规则的物体测量:精度高 ...

  8. 线结构光光条直线方程提取问题分析

    在线结构光视觉测量系统中,激光光条的提取精度至关重要.光条的提取效果,一方面取决于激光光条本身的质量,另一方面取决于图像处理算法性能,下面进行简要分析. 拍摄的原始图片如下图所示: 用的绿光激光器,本 ...

  9. 灰度重心法提取光条纹中心

    灰度重心法提取激光光条纹中心其实是将光条纹截面的灰度值分布中的质心记作为光条纹的中心. 在一列线激光中先利用极值法求取光强最大的一点gmax,然后确定一个阀值K=gmax-g(g取10-20),在 ...

  10. 灰度重心法提取中心线遇到的问题

    import cv2 img = cv2.imread("E:/tuku/2019-10-28_10_36_21_370.bmp",0) median = cv2.Gaussian ...

最新文章

  1. 直接在sublime中运行php
  2. 云服务器 ECS 配置:阿里云ECS Windows Server 2012 搭建AD
  3. shell脚本中获取当前所在目录地址
  4. GUI学习之十四——QAbstractSpinBox学习总结
  5. 圆环自带动画进度条ColorfulRingProgressView
  6. 机器学习 测试_测试优先机器学习
  7. SharePoint项目中新建类库的错误处理及项目建设中遇到的问题总结
  8. Django之Mode的外键自关联和引用未定义的Model
  9. the future of real-time rendering hardware
  10. [转载]网页栅格系统研究(3):粒度问题
  11. caffe boost cuda __float128 undefined
  12. 运维真的被云革命掉了吗?
  13. AndroidStudio安卓原生开发_UI控件_Spinner用法_下拉选择框---Android原生开发工作笔记100
  14. dcp9020cdn硒鼓!错误_显示硒鼓错误的解决办法
  15. MATLAB数据导入汇总
  16. Win7系统安装详细教程步骤
  17. ASP.NET入门篇【项目实战】打造一个自己的相册(二)登录模块
  18. 【Linux】—— Linux 环境搭建
  19. Mixly2.0版本的Blinker库文件
  20. 约瑟夫环---自杀环问题 C++数组实现 数学推理

热门文章

  1. 大华设备无法注册EasyGBS国标视频平台,是什么原因?
  2. PlaySound详解
  3. 威富通移动支付开发文档
  4. janusgraph 引入 java,从头开始学JanusGraph 0.4
  5. Maven环境变量配置及是否成功
  6. 2017最新xcode打包APP详细图文
  7. Java线程状态RUNNABLE详解
  8. Java线程状态分析/线程状态转换图
  9. 青龙面板之运行脚本文件
  10. oracle有rtf函数,Delphi中对Oracle存取RTF文档_Delphi