opencv 星空_opencv如何将大于5000像素点的轮廓绘制出来?

contourArea函数的运用。

具体例子可以看下面的。

《如何获得物体的主要方向?》

代码略解:

1、读入图片,寻找轮廓;

//读入图像,转换为灰度

Mat img = imread("e:/sandbox/pca1.jpg");

Mat bw;

cvtColor(img, bw, COLOR_BGR2GRAY);

//阈值处理

threshold(bw, bw, 150, 255, CV_THRESH_BINARY);

//寻找轮廓

vector > contours;

vector hierarchy;

findContours(bw, contours, hierarchy, CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

2、首先以大小筛选轮廓;

//轮廓分析,找到工件

for (size_t i = 0; i < contours.size(); ++i)

{

//计算轮廓大小

double area = contourArea(contours[i]);

//去除过小或者过大的轮廓区域(科学计数法表示)

if (area < 1e2 || 1e5 < area) continue;

//绘制轮廓

drawContours(img, contours, i, CV_RGB(255, 0, 0), 2, 8, hierarchy, 0);

//寻找每一个轮廓的方向

getOrientation(contours[i], img);

}

3、单独处理每个轮廓,分析其主要方向,绘制结果

//获得构建的主要方向

double getOrientation(vector &pts, Mat &img)

{

//构建pca数据。这里做的是将轮廓点的x和y作为两个维压到data_pts中去。

Mat data_pts = Mat(pts.size(), 2, CV_64FC1);//使用mat来保存数据,也是为了后面pca处理需要

for (int i = 0; i < data_pts.rows; ++i)

{

data_pts.at(i, 0) = pts[i].x;

data_pts.at(i, 1) = pts[i].y;

}

//执行PCA分析

PCA pca_analysis(data_pts, Mat(), CV_PCA_DATA_AS_ROW);

//获得最主要分量,在本例中,对应的就是轮廓中点,也是图像中点

Point pos = Point(pca_analysis.mean.at(0, 0),pca_analysis.mean.at(0, 1));

//存储特征向量和特征值

vector eigen_vecs(2);

vector eigen_val(2);

for (int i = 0; i < 2; ++i)

{

eigen_vecs[i] = Point2d(pca_analysis.eigenvectors.at(i, 0),pca_analysis.eigenvectors.at(i, 1));

eigen_val[i] = pca_analysis.eigenvalues.at(i,0);//注意,这个地方原代码写错了

}

//在轮廓/图像中点绘制小圆

circle(img, pos, 3, CV_RGB(255, 0, 255), 2);

//计算出直线,在主要方向上绘制直线

line(img, pos, pos + 0.02 * Point(eigen_vecs[0].x * eigen_val[0], eigen_vecs[0].y * eigen_val[0]) , CV_RGB(255, 255, 0));

line(img, pos, pos + 0.02 * Point(eigen_vecs[1].x * eigen_val[1], eigen_vecs[1].y * eigen_val[1]) , CV_RGB(0, 255, 255));

//返回角度结果

return atan2(eigen_vecs[0].y, eigen_vecs[0].x);

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454966.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

TS 188字节流结构图

应该说真正了解TS&#xff0c;还是看了朋友推荐的《数字电视业务信息及其编码》一书之后&#xff0c;MPEG2 TS和数字电视是紧密不可分割的&#xff0c;值得总结一下其中的一些关系。 ISO/IEC&#xff0d;13818&#xff0d;1&#xff1a;系统部分&#xff1b; ISO/IEC&#xff…

二进制安装mysql 5.7、mariadb (附yum安装方式)

前言&#xff1a;本文以mariadb为例进行讲解&#xff0c;安装mysql同理&#xff0c;并以通过测试。安装前查找系统已安装的相关包&#xff08;rpm -qa|grep -e "mysql" -e "mariadb"&#xff09;并进行卸载。1、准备mariadb存储数据库文件的目录。mkdir -p…

GLSL/C++ 实现滤镜效果

入门效果之浮雕 "浮雕"图象效果是指图像的前景前向凸出背景。常见于一些纪念碑的雕刻上。要实现浮雕事实上很easy。我们把图象的一个象素和左上方的象素进行求差运算。并加上一个灰度。这个灰度就是表示背景颜色。这里我们设置这个插值为128 (图象RGB的值是0-255)。同…

cv mat的shape_pybind11—opencv图像处理(numpy数据交换)

前言C opencv中图像和矩阵的表示采用Mat类&#xff0c;比如imread()读取的结果就是返回一个Mat对象。对于python而言&#xff0c;numpy 通常用于矩阵运算&#xff0c; 矩阵&#xff0c;图像表示为numpy.ndarray类。因此&#xff0c;想要将python numpy.ndarray的数据传递到C op…

H.264算法的优化策略

文章来源&#xff1a; http://www.tichinese.com/Article/Video/200909/2150.html 编辑&#xff1a;小乙哥 1 代码优化的主要方法 通过代码移植能够获得在DSP上初步运行的代码&#xff0c;但是它由于没有考虑到DSP自身的硬件特点&#xff0c;不适合DSP强大的并行处理能力&#…

吃饭、睡觉、打星星之“打星星”!

大家见过这样的星星么&#xff1f; 你想要多少就可以多少的星星&#xff01;&#xff01;&#xff01; 下面我们就来用奇妙的JavaScript来实现 首先我们要引入一个输入包 let readline require("readline-sync");然后再让客户输入数字&#xff0c;并将其存放起来con…

mysql 自动分表_Mysql Event 自动分表

create table TempComments Like dycomments;上述 SQL语句创建的新表带有原表的所有属性&#xff0c;主键&#xff0c;索引等。自动分表怎么做呢&#xff1f;使用上述语句自动创建分表。那么ID怎么设置呢&#xff1f;更改表格自增主键的起始值 例如 表格为 xxx_201604 那么将起…

《大道至简》周爱民读后感

作为一个准大二的软件工程系的学生&#xff0c;初读此书&#xff0c;很多部分是不太容易理解的&#xff0c;自己又没有经历过&#xff0c;感觉差了一个高度似的。自己读的挺蒙&#xff0c;于是就去百度了一下这本书的读后感&#xff0c;看看别人读懂了什么&#xff0c;许多的评…

使用iconv-lite解决node当中不支持GBK编码的问题

1、Node环境当中不支持GBK编码 node.js当中的Buffer对象支持的编码格式的种类有限&#xff0c;大概有ascii、utf8、utf16le、ucs2、base64、binary、hex。不支持GBK的编码形式。对于windows系统来说&#xff0c;由于历史原因&#xff0c;许多文件默认的编码格式均为GBK。 比如我…

c1

dmg和package是安装文件&#xff0c;dmg直接拖进应用程序中&#xff0c;pkg要进行安装。 playfround是swift项目。--ios -----oc&#xff08;面向对象的C&#xff09; -----swift(oc的封装)1963年剑桥大学退出cpl,1967年对cpl简化推出bcpl&#xff0c;1970贝尔实验室对bcpl简化…

mysql必_MySQL必知必会(一)

摘自《MySQL必知必会》1.1.1 什么是数据库数据库&#xff1a;保存有组织的数据的容器(通常是一个文件或一组文件)人们通常用数据库这个术语来代表他们使用的数据库软件。这是不正确的&#xff0c;它是引起混淆的根源。确切地说&#xff0c;数据库软件应称为DBMS(数据库管理系统…

python之工作举例:通过复制NC文件来造数据

1 # 通过对NC文件复制来造数据2 import os, shutil3 4 # 遍历的根目录5 root_dir "D:\\test_data\\DISASTER\\"6 # 获取NC文件的时间7 time_source 201612280800008 # 生成NC文件的时间9 time_new 2018122808000010 11 12 def get_dir_path(dir_name, time_str):1…

Python 3.5.2 TypeError: a bytes-like object is required, not 'str’问题解决方案

运行环境Mac Python 3.5.2 Q: http_response """\ HTTP/1.1 200 OK Hello, World! """ client_connection.sendall(http_response) TypeError: a bytes-like object is required, not str 类型错误&#xff0c;需要的是一个byte类型&#xff0…

mysql 集群架构_mysql企业常用集群架构

转自 https://blog.csdn.net/kingice1014/article/details/760200611、mysql企业常用集群架构在中小型互联网的企业中。mysql的集群一般就是上图的架构。WEB节点读取数据库的时候读取dbproxy服务器。dbproxy服务器通过对SQL语句的判断来进行数据库的读写分离。读请求负载到从库…

h.264视频文件封装

所谓封装格式就是将已经编码压缩好的视频轨和音频轨按照一定的格式放到一个文件中&#xff0c;也就是说仅仅是一个外壳&#xff0c;或者大家把它当成一个放视频轨和音频轨的文件夹也可以。说得通俗点&#xff0c;视频轨相当于饭&#xff0c;而音频轨相当于菜&#xff0c;封装格…

python cookbook 笔记三

分组&#xff1a; rows [{address: 5412 N CLARK, date: 07/01/2012},{address: 5148 N CLARK, date: 07/04/2012},{address: 5800 E 58TH, date: 07/02/2012},{address: 2122 N CLARK, date: 07/03/2012},{address: 5645 N RAVENSWOOD, date: 07/02/2012},{address: 1060 W A…

关于Vue2.0,Express实现的简单跨域

npm install express -g 通过npm全局安装express&#xff0c;之后可以通过 express --version 来查看express版本 express server 通过express server生成server项目文件 npm install 安装server的项目依赖 可以通过执行server下的bin\www文件可以开启服务 在www文件我们可以默…

mysql datetime类型按天查询_mysql 时间相关sql , 按天、月、季度、年等条件进行查询...

-- mysql查询本季度-- 今天select * from ticket_order_detail where to_days(use_time) to_days(now());-- 7天SELECT *FROM ticket_order_detail where DATE_SUB(CURDATE(), INTERVAL 7 DAY) < date( use_time)-- 近30天SELECT *FROM ticket_order_detail where DATE_SUB…

ffmpeg分析系列

hello&#xff0c;各位好&#xff0c;本人是一名嵌入式软件工程师&#xff0c;目前正使用ffmpeg开发一款嵌入式多媒体播放器&#xff0c;《ffmpeg分析》系列博文是本人在阅读ffmpeg源代码时所做的笔记&#xff0c;希望对各位有点帮助。分析过程结合下面的例程&#xff1a;http:…

Linux kernel的中断子系统之(二):IRQ Domain介绍

返回目录&#xff1a;《ARM-Linux中断系统》。 总结&#xff1a;一、二概述了软硬件不同角度的IRQ Number和HW Interrupt ID&#xff0c;这就需要他们之间架个桥梁。 三介绍了架设这种桥梁的几种方式&#xff1a;Linear、Radix Tree和no map。 四介绍了两种基础数据结构描述中断…