当前位置: 首页 > news >正文

c++画出分割图像,水平线和垂直线

1、pca 找到图像某个区域的垂直线,并画出来

    // 1、 斑块的框+ 血管二值化图,pca 找到垂直血管壁的直线,  还是根据斑块找主轴方向吧// Step 1: 提取斑块左右范围内的血管像素点坐标,std::vector<cv::Point> points;for (int y = 0; y < binaryVessel.rows; y++) {for (int x = x1; x <= x2; x++) {if (binaryVessel.at<uchar>(y, x) == 255) {points.push_back(cv::Point(x, y));}}}if (points.empty()) {std::cout << "====================>error No valid pixels in the specified range.  斑块附近的血管分割区域不存在,结束函数功能 " << std::endl;return;}// 转换为 cv::Mat 格式cv::Mat pointsMat(points.size(), 2, CV_32F);for (int i = 0; i < points.size(); i++) {pointsMat.at<float>(i, 0) = points[i].x;pointsMat.at<float>(i, 1) = points[i].y;}// Step 2: 使用 PCA  获取垂直线段斜率,感觉有点异常,不要了,改成用最小外接矩形// binaryPlaque    pointsMatcv::PCA pca(pointsMat, cv::noArray(), cv::PCA::DATA_AS_ROW);// Step 3: 获取主成分(直线的方向)和主成分对应的直线上的点cv::Mat directions = pca.eigenvectors;cv::Mat linePoints = pca.mean;// Step 4: 计算垂直线的斜率和截距float kVertical = -directions.at<float>(0,0) / directions.at<float>(0,1);float interceptHorizontal = linePoints.at<float>(0, 1) - kVertical * linePoints.at<float>(0, 0);// Step 5: 绘制垂直线float x;cv::Mat image22;  // 存储处理后的图像cv::cvtColor(binaryVessel, image22, cv::COLOR_GRAY2BGR);  // binaryVessel 转换为彩色图像  image22,存储for (int i = 0; i < image22.cols; i++) {x = static_cast<float>(i);float yVertical = kVertical * x + interceptHorizontal;cv::circle(image22, cv::Point(static_cast<int>(x), static_cast<int>(yVertical)), 1, cv::Scalar(0, 255, 0), -1);}cv::imwrite("/home/hebin/Desktop/shiyuanyin/image2.png", image22);  // 保存画图的直线

在这里插入图片描述

2、使用最小外接矩形的框,来找到水平线和垂直线

http://www.lryc.cn/news/115578.html

相关文章:

  • Python 程序设计入门(015)—— enumerate() 函数的用法
  • __dict__属性
  • k8s之Pod控制器
  • 逆元(求乘法逆元的几种方法)
  • 没点本事,还真做不好数字化转型
  • windows 10 远程桌面配置
  • OpenStreetMap 上基于A*搜索算法的C ++路线规划项目
  • java实现随机生成验证码
  • Positive证书是什么?
  • vulnhub靶场-y0usef笔记
  • 华为智选首款纯电轿跑“LUXEED”能大卖吗?
  • ArcGIS API for JavaScript 3.44 地图Demo示例合集
  • RFID工业识别技术:供应链智能化的科技颠覆
  • 行列转换两例的思考
  • 高德地图 SDK 接口测试接入(AndroidTest 上手)
  • 省电模式稳定电压显示IC32×4 LCD显示驱动芯片
  • 分布式架构的观测
  • 交替方向乘子
  • 9-数据结构-栈(C语言版)
  • C#,数值计算——用于从连续的数据值流估计任意分位数的计算方法与源程序
  • 实践分享:小程序事件系统设计
  • 无涯教程-Perl - bless函数
  • Java关键字:final解析
  • LeetCode--HOT100题(25)
  • 外卖项目,登录设计,nginx反向代理,MD5明文加密
  • 【云原生】kubernetes在Pod中init容器的作用和使用
  • springboot+vue分页
  • 【linux】ssh 和adb connect区别
  • iPhone手机怎么恢复出厂设置(详解)
  • 灵活利用ChatAI,减轻工作任务—语言/翻译篇