图像上找线、圆

Halcon慢慢来(卡尺找线、找圆) 看看Halcon(3) 阅读详情
/* Finds lines on binary image using one of several methods.
   line_storage is either memory storage or 1 x <max number of lines> CvMat, its
   number of columns is changed by the function.
   method is one of CV_HOUGH_*;
   rho, theta and threshold are used for each of those methods;
   param1 ~ line length, param2 ~ line gap - for probabilistic,

   param1 ~ srn, param2 ~ stn - for multi-scale */


CVAPI(CvSeq*)  cvHoughLines2( CvArr* image, void* line_storage, int method,
                              double rho, double theta, int threshold,
                              double param1 CV_DEFAULT(0), double param2 CV_DEFAULT(0));

找线实例:

CvMemStorage* _pStorage = cvCreateMemStorage(0);
CvSeq* _lines=cvHoughLines2(_grayImg,_pStorage,CV_HOUGH_PROBABILISTIC,1,CV_PI/180,50,5,10);


/* Finds circles in the image */
CVAPI(CvSeq*) cvHoughCircles( CvArr* image, void* circle_storage,
                              int method, double dp, double min_dist,
                              double param1 CV_DEFAULT(100),
                              double param2 CV_DEFAULT(100),
                              int min_radius CV_DEFAULT(0),

                              int max_radius CV_DEFAULT(0));


切记:在循环使用中,每次检测完后要cvClearMemStorage(storage);否则的话一直检测,则存储的线或圆的内存会一直保存在storage中,就会出现内存泄露。

cvHoughLines2和cvHoughCircles使用范例。有图,有程序。

cvHoughLines2需要的是Binary image。 cvHoughCircles 需要的是灰度图,而且它会自动调用cvSobel函数。

关于cvHoughCircles多说一句,之前最好用cvSmooth一下,否则会有很多错误的圆被识别出来。

cvHoughLines2

pattern512.JPG
orginal

lines.jpg
lines.jpg (99.05 KiB) 被浏览 4777 次


cvHoughCircles 
cccc1.jpg
cccc1.jpg (12.69 KiB) 被浏览 4777 次
circles.jpg

(VS2008+open1.1,注意图片路径)

[cpp]  view plain copy
  1. <span style="background-color: rgb(255, 255, 255);">#include "stdafx.h"  
  2. #include <iostream>  
  3.   
  4. #include <cv.h>  
  5. #include <cxcore.h>  
  6. #include <highgui.h>  
  7. #include <math.h>  
  8. using namespace std;  
  9. /* 
  10. coded and updated by Huang, Haiqiao 2010-01-13 
  11. Examples of using cvHoughLines2 and cvHoughCircles 
  12. */  
  13.   
  14. int main(int argc, char** argv)  
  15. {  
  16.    int i;  
  17.    cout << "Lines and Circles OpenCV!"<<endl;  //\\cameraman.jpg  
  18.    char* filename="D:\\OpenCV_stuff\\SampleImages\\pattern512.bmp";  
  19.    IplImage* imgRGB = cvLoadImage(filename);   
  20.    IplImage* imgGrey = cvLoadImage(filename,0); //grey image  
  21.    char* filename1="D:\\OpenCV_stuff\\SampleImages\\circle3.jpg";  
  22.    IplImage* imgcircle = cvLoadImage(filename1,1); //color image  
  23.    if (imgGrey==NULL){  
  24.       cout << "No valid image input."<<endl;   
  25.       char c=getchar();  
  26.       return 1;  
  27.    }   
  28.      
  29.    IplImage* cannyImg  = cvCreateImage(cvSize(imgGrey->width,imgGrey->height),IPL_DEPTH_8U,1);  
  30.    cvCanny(imgGrey,cannyImg,170,200,3);  
  31.   
  32.    //************hough lines**probabilistic********//  
  33.    CvMemStorage* storage = cvCreateMemStorage(0);  
  34.         CvSeq* lines = 0;   
  35.    double rho=1;  
  36.    double theta=CV_PI/180;  
  37.    double threshold=30;  
  38.    double min_length=40;//CV_HOUGH_PROBABILISTIC  
  39.    double sepration_connection=20;//CV_HOUGH_PROBABILISTIC  
  40.   
  41.    //binary image is needed. 
  42. cvClearMemStorage(storage); 
  43.     lines = cvHoughLines2(  
  44.       cannyImg,   
  45.       storage,   
  46.       CV_HOUGH_PROBABILISTIC,   
  47.       rho,  
  48.       theta,   
  49.       threshold,  
  50.       min_length,   
  51.       sepration_connection);  
  52.   
  53.    //draw lines found by cvHoughLines2  
  54.     for( i = 0; i < lines->total; i++ )  
  55.     {  
  56.        CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);  
  57.        cvLine(imgRGB, line[0], line[1], CV_RGB(255,0,0),1, 8 );//cannyImgColor  
  58.     }   
  59.      
  60.   
  61.   
  62.    /* 
  63.       Circle identification 
  64.    */    
  65.    IplImage* grayimgcircle = cvCreateImage( cvGetSize(imgcircle), 8, 1 );  
  66.    CvMemStorage* storagecircle = cvCreateMemStorage(0);  
  67.     cvCvtColor( imgcircle, grayimgcircle, CV_BGR2GRAY );  
  68.    // smooth it, otherwise a lot of false circles may be detected  
  69.     cvSmooth( grayimgcircle, grayimgcircle, CV_GAUSSIAN, 9, 9 );   
  70.       
  71.    double dp=2;  
  72.    double min_dist=10;  
  73.    int min_radius=5;  
  74.    int max_radius=150;   
  75.    //only greyimage is needed. cvHoughCircles would call cvSobel() internally. 
  76. cvClearMemStorage(storage); 
  77.    CvSeq* circles = cvHoughCircles(   
  78.          grayimgcircle,   
  79.          storagecircle,   
  80.          CV_HOUGH_GRADIENT,   
  81.          dp,   
  82.          min_dist,   
  83.          min_radius,   
  84.          max_radius );  
  85.   
  86.     //draw found curves  
  87.     for( i = 0; i < circles->total; i++ )  
  88.     {  
  89.          float* p = (float*)cvGetSeqElem( circles, i );  
  90.          cvCircle( imgcircle, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );  
  91.     }  
  92.      
  93.   
  94.   
  95.     cvNamedWindow( "Circles", CV_WINDOW_AUTOSIZE );  
  96.     cvShowImage( "Circles", imgcircle );  
  97.    cvNamedWindow("Original", CV_WINDOW_AUTOSIZE );  
  98.    cvShowImage( "Original", imgRGB );  
  99.   
  100.    cvWaitKey(0);  
  101.   
  102.    cvDestroyWindow("HoughLines");  
  103.    cvReleaseImage(&imgGrey);  
  104.    cvDestroyWindow("Original");  
  105.    cvReleaseImage(&imgcircle);  
  106.    cvDestroyWindow("Circles");  
  107.      
  108.    //char c=getchar();  
  109.    return 0;  
  110. }</span>  




智能生活中枢:基于 ESP32-S3 的桌面智能助手与日程提醒终端设计与实现 本文完成了基于 ESP32-S3 的桌面智能助手与日程提醒终端的完整设计,实现了时间同步、日程管理、声光提醒、环境监测、本地存储等核心功能。硬件接线简洁、软件逻辑清晰,可直接制作成品使用。硬件方案:以 ESP32-S3 为核心,搭配 OLED、DS3231、DHT11、按键、声光模块,接线标准化、易复刻;软件方案:基于 Arduino 开发,提供标准 Mermaid 软件流程图,代码模块化、可直接编译运行;核心功能:网络授时、本地日程管理、掉电存储、声光提醒、温湿度监测,满足桌面智能助手全场景需求。 阅读详情

相关推荐

《计算机科学概论(第13版)》5-12章

定序是按给定语句的顺序应用每个算法步骤。(primitive):建立一组定义明确的构建块,利用它们来构造和执行算法的表示。可以消除歧义,不会引起误解,就像咱们传统的自然语言(用英语来沟通交流)。(programming language):原语的集合以及说明如何组合这些原语来表示比较复杂的想法的规则集合。用程序设计语言描述的算法可以在计算机上执行。每个原语都有自己的语法和语义,语法指的是原语的符号表示,语义是指该原语的含义。伪代码:用户开发过程中非正式表达想法的符号系统。

输入知识,消化知识,输出知识,分享知识,教人让我学习更好,业精于勤荒于嬉,行成于思毁于随 1036

python 检测图像圆弧_基于OpenCV和Python的图像圆弧检测

尝试以下代码:它将检测所有圆、曲线和圆弧:int main(){//RANSAC//load edge imagecv::Mat color = cv::imread("../circleDetectionEdges.png");// convert to grayscalecv::Mat gray;cv::cvtColor(color, gray, CV_RGB2GRAY);// get bin...

weixin_29380121的博客 4245

安全虚拟化SEV简单介绍

安全虚拟化SEV简单介绍什么是SEV什么是SVMSME介绍SEV介绍总结 什么是SEV SEV是由AMD提出的安全虚拟化Secure Encrypted Virtualization技术的英文首字母的缩写。简单来说就是主内存控制器具备了加密功能可以对虚拟机内存数据进行保护。在真正介绍SEV之前,我们首先要弄清楚两个关键的基本概念:SVM、SME。下面先简单了解一下SVM和SME。 什么是SVM S...

artine的专栏 6391

在图像中找任意曲线记录

方法1 找到标准线的像素,通过计算3通道图像中像素与便准线像素的差值,取平均后再画出直方图,可以得到一个阈值,这个阈值代表了差值多少值以内是一根线。 destiny_img_original = cv2.imread('D:\zy\data\windpipe_second_ligation\windpipe_img/2020_9_26_Trim.mp4588.jpg', 1) # 得到目标黑线的像素均值 black_line_one_pixel = get_black_line_pixel() # 将目标

qq_276982536的博客 416

单细胞分析实录(12): 如何推断肿瘤细胞

公众号后台回复20210418,获取本文的测试数据 1. 回顾 前面我已经讲解了inferCNV的基本用法,这一节继续学习:如何推断肿瘤细胞。本文应该是到目前为止,全网最详细的帖子(之一)。 关于肿瘤细胞的推断,比如研究上皮细胞起源的肿瘤,我见过的一些做法如下 简单粗暴型:将来源肿瘤病灶的所有上皮细胞都看成是肿瘤细胞 看CNV:将来源于肿瘤病灶的上皮细胞和参考细胞比较,将那些有明显CNV的细胞看作肿瘤细胞 看表达特征:考虑到有的肿瘤细胞可能没有CNV层面的变化,有的文章会根据肿瘤与正常的表达谱来区分是.

TOP生物信息 1万+

技术文档的语言表达:简洁、准确与易懂的平衡艺术

技术文档的语言表达不仅要简洁、准确,还需要能够打破技术壁垒,使不同背景的读者都能理解。这是一项需要技巧和经验的工作,它要求技术作者既要具备扎实的专业知识,又要具备清晰的表达能力。通过不断打磨语言的简洁性、准确性和易懂性,我们能够创造出一份高质量的技术文档,让知识的传递不再受限于语言的障碍。

人心有反复,好在山水有重逢。 4677

霍夫变换在图像处理中的应用(寻找图像中的直线)

使用霍夫变换寻找图像中的直线特征

Yogi_zhang的博客 2908

深入解析FOC电流环PI参数整定:从理论到实践

本文深入解析了FOC(磁场定向控制)中电流环PI参数整定的核心原理与实践方法。文章从永磁同步电机模型出发,详细阐述了基于带宽与零极点对消的工程法及考虑逆变器延迟的二阶系统整定法两种经典策略,并提供了从理论计算到安全上电调试的完整步骤与常见问题解决方案,帮助工程师精准调校电机控制性能。

weixin_29164497的博客 452

找线找圆halcon源码:图像处理的高效助手

找线找圆halcon源码:图像处理的高效助手 去发现同类优质开源项目:https://gitcode.com/ 项目介绍 在当今技术飞速发展的时代,图像处理已成为众多领域中不可或缺的技术。找线找圆halcon源码,是一款专门为图像处理领域量身定制的开源工具。它基于halcon算子开发,旨在帮助开发者和工程师们更加便捷地实现图像中的线条和圆形识别,提升工作效率。 项目技术分析 核心功能 找线找圆ha...

gitblog_06732的博客 1059

基于YOLOv8与UI界面的短视频内容审核系统实现与深度学习应用

YOLO(You Only Look Once)是一种用于实时物体检测的深度学习模型,它能在单次前向传播中同时完成物体检测和定位。YOLOv8是YOLO系列中的最新版本,相较于之前的版本,YOLOv8具有更高的检测精度和更快的推理速度,特别适合需要实时检测的应用场景。YOLOv8通过卷积神经网络(CNN)来提取图像中的特征,并通过多个卷积层来预测每个目标的位置和类别。该模型的优势在于其端到端的结构,使得在视频监控、自动驾驶、安防监控等实时应用中,能够实现快速且高效的目标检测。

YOLO 314

Cadence PCB仿真使用Allegro PCB SI S参数配置方法图文教程

S参数即S-Parameter是指散射参数,描述信号在传输线中的正反向传输和正反向反射的情况。本文讲述在使用Allegro PCB SI进行信号完整性仿真前,S参数的配置方法。

fydar的博客 2177

找线找圆halcon源码

找线找圆halcon源码 去发现同类优质开源项目:https://gitcode.com/ 简介 本仓库提供了基于halcon算子开发的找线找圆工具源码,文件名为“找线找圆halcon源码.rar”。该工具旨在帮助开发者快速实现图像处理中的找线找圆功能,提高开发效率。 功能特点 易用性:直接调用,无需复杂配置,快速集成到项目中。 专业性:基于halcon算子开发,保证功能的稳定性和准确性。 使...

gitblog_06783的博客 458

从零开始学习PX4源码23(飞行模式管理)

本文摘要主要介绍了PX4飞控系统中飞行模式管理模块的代码实现流程。文章从整体架构入手,分析了飞行模式管理模块的启动过程、类继承关系以及核心运行机制。重点阐述了模块从rc.mc_apps启动脚本到FlightModeManager::main()的调用链路,包括任务创建、工作队列初始化和主循环执行流程。核心部分解释了Run()函数如何通过订阅传感器数据、更新参数、处理命令以及生成轨迹设定点来实现飞行模式切换和任务管理功能。文章为理解PX4飞行控制系统的模式切换机制提供了代码层面的详细分析。

陌城烟雨 499

C#联合HALCON:实现模板匹配、测量、找线找圆等功能,可连接相机测试

通过C#联合Halcon,我们可以很方便地实现各种图像处理功能。虽然C#不是Halcon的“原生”语言,但通过.NET库,我们依然可以发挥Halcon的强大功能。代码写起来也不复杂,关键是要理解Halcon的API和图像处理的基本原理。如果你也在做类似的项目,希望这些代码和分析能给你一些启发。当然,Halcon的功能远不止这些,大家可以根据自己的需求去探索更多的功能。

2504_94303751的博客 497

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

基于opencv与qt开发的卡尺工具,卡尺工具,具有工具跟随功能,找线找圆工具可以根据形状匹配...

基于opencv与qt开发的卡尺工具,卡尺工具,具有工具跟随功能,找线找圆工具可以根据形状匹配位置定位实现带X、Y以及角度偏差的自动纠偏,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法和找线找圆算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料。这可不是普通的测量工具,它能自动跟着工件跑,实时计算XY坐标和角度偏差,流水线上那些歪七扭八的零件可算找着克星了。咱们先瞅瞅图像采集这环节。

yrZXiZUdP的博客 358

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C#联合OpenCVSharp开发的视觉源码程序:包含模板匹配、找线找圆、预处理等功能及图像显...

本框架以“设备无关、算法插件化、业务可编排”为设计目标,将工业现场 80% 的共性需求抽象为四大类、二十余个子模块,覆盖“取像→标定→定位→测量→识别→通讯”完整链路。开发者无需关心底层 OpenCV 版本差异与相机 SDK 细节,通过统一接口即可在 30 分钟内搭建一条视觉检测工程。该框架把“工业视觉”拆分为可插拔的原子能力,让开发者聚焦工艺逻辑而非算法细节;全部源码,包含图像显示控件,绘制roi。包含模板匹配,找线找圆,预处理等功能。包含模板匹配,找线找圆,预处理等功能。六、二次开发快速入口。

zUlKyyRC的博客 492

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

探索机器视觉:从工业相机采集到模板匹配

机器视觉,OpenCV,Qt,工业相机采集,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料在当今的工业自动化和智能制造领域,机器视觉技术就像是一双敏锐的“眼睛”,能让机器像人类一样“看”懂周围的世界。今天咱们就来聊聊机器视觉里的那些事儿,涉及到 OpenCV、Qt、工业相机采集以及各种实用的图像处理工具。

qq_58982825的博客 509

一个想法:基于OpenCV实现一套带UI的视觉控件库(C#版本)

文章目录功能需求图像工具流程执行C#调用OpenCV APIC# UI设计与实现 功能需求 控件主要是为了能够实现及时运行效果,类似VisionPro视觉库,方便工业视觉调试。 能力有限,知识面不够。希望大家能提供思路,待我慢慢研究学习,一步一步实现。如果有好的这方面的开源项目,希望大家推荐下。 图像工具 视觉工具方面,暂时可以不用太全面。能够实现以下几个功能即可: 找点; 找线; 找圆; 求线与线的交点; Blob分析; 模板匹配; 定位; 流程执行 将工具保存在一个二进制文件中,方便载入。然后让二进

tianxia_rwx的博客 1063

机器视觉入门之路(五七,写博客的快意节奏!---慢时光领悟)

这样设计下去,每一个正常的人都会疯掉!我们已经升了十四级,该告一段落了!其实这个过程叫做learning,learning是一个耗时,复杂,练习,寻找道,领悟道的一个过程,大多数情况是学不到,以失败告终,所以learning是一个艰难困苦的历程。那么我们的道是什么?就是线图像。我们学会了线图像变感兴趣区域(ROI),学会了变找线工具,学会了变找圆工具,其实还可以变相对坐标系工具(fixture),...

ganggangwawa的博客 417

C#与OpenCVsharp联合开发的视觉源码程序:涵盖模板匹配、找线和找圆等功能,包含图像预...

本框架以“设备无关、算法插件化、业务可编排”为设计目标,将工业现场 80% 的共性需求抽象为四大类、二十余个子模块,覆盖“取像→标定→定位→测量→识别→通讯”完整链路。开发者无需关心底层 OpenCV 版本差异与相机 SDK 细节,通过统一接口即可在 30 分钟内搭建一条视觉检测工程。该框架把“工业视觉”拆分为可插拔的原子能力,让开发者聚焦工艺逻辑而非算法细节;全部源码,包含图像显示控件,绘制roi。包含模板匹配,找线找圆,预处理等功能。包含模板匹配,找线找圆,预处理等功能。六、二次开发快速入口。

2503_93933470的博客 463

基于OpenCV与QT开发的卡尺工具:工具跟随、自动纠偏、图像处理与形状匹配集成应用

基于opencv与qt开发的卡尺工具,卡尺工具,具有工具跟随功能,找线找圆工具可以根据形状匹配位置定位实现带X、Y以及角度偏差的自动纠偏,图像采集,图像处理,卡尺工具,找线,找圆,颜色检测,模板匹配,形状匹配,海康工业相机采集+基于形状的模板匹配界面,提前说明,形状匹配算法和找线找圆算法封装成dll直接调用的,其他都是源码,是不错的学习资料,程序资料。这可不是普通的测量工具,它能自动跟着工件跑,实时计算XY坐标和角度偏差,流水线上那些歪七扭八的零件可算找着克星了。咱们先瞅瞅图像采集这环节。

HXIWbeyzus的博客 438

c#联合opencvsharp开发的视觉源码程序 包含模板匹配,找线找圆,预处理等功能 全部源...

本框架以“设备无关、算法插件化、业务可编排”为设计目标,将工业现场 80% 的共性需求抽象为四大类、二十余个子模块,覆盖“取像→标定→定位→测量→识别→通讯”完整链路。开发者无需关心底层 OpenCV 版本差异与相机 SDK 细节,通过统一接口即可在 30 分钟内搭建一条视觉检测工程。该框架把“工业视觉”拆分为可插拔的原子能力,让开发者聚焦工艺逻辑而非算法细节;全部源码,包含图像显示控件,绘制roi。包含模板匹配,找线找圆,预处理等功能。包含模板匹配,找线找圆,预处理等功能。六、二次开发快速入口。

2504_94289075的博客 1171
上一篇: 【OpenCV】数字图像灰度直方图
下一篇: 进程与线程的区别联系
lien0906
博客等级 码龄15年 415粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值