- 博客(150)
- 资源 (1)
- 收藏
- 关注
原创 Halcon:多张图片合并成一张图片
1. 背景 现有一文件夹,其中包含多张图片,希望能够将这些图片按几行几列合并成一张大图并显示2. 实现* 关闭窗口后重新打开dev_close_window()dev_open_window (0, 0, 600, 400, 'black', WindowHandle)* 创建一张空白图片gen_empty_obj (Images)* 遍历文件夹list_files ('C:/test', ['files','follow_links'], ImageFiles)tuple_regex
2021-05-24 13:40:55
8853
原创 Halcon:在Halcon窗口缩放图片时部分object消失?
1. 背景 在对某一芯片图片进行检测时,需要显示许多object,部分代码大致如下所示。程序运行时,Halcon窗口可以正常显示所有的object,但当使用鼠标缩放图片详细查看每个object时,发现只能显示49个新的object,之前的object都会消失。for Index := 1 to 50 by 1 dev_display (Rectangle1) dev_display (Rectangle2) dev_display (Rectangle3) dev_display (Recta
2021-05-18 10:03:16
3424
4
原创 MFC:OnGetMinMaxInfo与OnSize的简单小结
1. 背景 在编写MFC界面程序时,经常需要限制界面大小,或者针对界面大小变化调整控件位置和大小,此时便要用到OnGetMinMaxInfo或OnSize。void CXXXDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)void CXXXDlg::OnSize(UINT nType, int cx, int cy)2. 相同点1、两者都可用于限制界面的最小尺寸和最大尺寸;2、两者都会在CXXXDlg::OnInitDialog()之前执行,若需要使用.
2021-01-26 09:00:11
1241
原创 C++错误:s.size()与int混用
1. 背景#include <iostream>#include <string>using namespace std;int main(){ string s1="abcd"; for(int i=0; i<s1.size()-3; ++i) cout<<s1[i]; cout<<endl; string s2="ab"; for(int i=0; i<s2.size()-3; ++i) co.
2020-11-03 14:05:34
4959
原创 Halcon:在MFC窗口中显示Halcon图片
1. 背景环境:HALCON-20.05-Progress + VS2019要求:已安装VS,能够正常运行MFC程序。已安装Halcon,能够正常导出C++程序。VS已配置好Halcon运行环境。功能:设置MFC窗口大小,显示Halcon图片。2. 实现在MFCApplication1Dlg.cpp中添加头文件并使用命名空间。 #include "HalconCpp.h" using namespace HalconCpp;在BOOL CMFCApplication1Dl.
2020-10-16 14:06:25
3131
6
原创 Halcon:腐蚀或开运算后region个数并未改变
1. 问题 现有如下图片,对其进行腐蚀并统计前后region个数。* 采集图形并设置窗口read_image (Image, 'C:/Users/lenovo/Desktop/1.PNG')get_image_size (Image, Width, Height)dev_close_window ()dev_open_window (0, 0, Width, Height, 'black', WindowHandle)dev_set_draw ('margin')dev_set_lin.
2020-10-15 14:05:20
625
1
原创 Halcon:版本说明
1. 编译(Progress、Steady)HALCON Progress Edition:以6个月为发行周期。HALCON Steady Edition:以2年作为发行周期。2. 配置(Development、Runtime)HALCON Development version:halcon完全版,包含halcon所有功能,可分为HALCON Steady和 HALCON Steady Deep Learning。HALCON Runtime version:halcon运行版,在不同电脑中运.
2020-09-09 15:55:14
3678
1
原创 MFC:应用程序无法正常启动(0xc0150002)
1. 错误描述 现有一个使用VS2010编写的MFC旧程序,使用VS2019打开项目,配置好环境后运行程序发现VS出现如下错误:FXVision.exe - 应用程序错误 应用程序无法正常启动(0xc0150002)。请单击“确定”关闭应用程序。2. 分析及解决 打开我的电脑,右键点击管理,选择计算机管理(本地)->事件查看器->Windows日志->应用程序,筛选出错误信息。 错误主要分为事件 10, WMI和事件33,SideBySide。其中事件 1.
2020-08-26 12:58:14
5021
原创 C++ Primer:第15章 面向对象程序设计
C++ Primer:第15章 面向对象程序设计第15章 面向对象程序设计15.1 OOP:概述15.2 定义基类和派生类1. 定义基类2. 定义派生类3. 类型转换与继承15.3 虚函数15.4 抽象基类15.5 访问控制与继承15.6 继承中的类作用域15.7 构造函数与拷贝控制15.8 容器与继承15.9 文本查询程序再探第15章 面向对象程序设计15.1 OOP:概述面向对象程序设计的核心思想是数据抽象、继承和动态绑定。数据抽象可将类的接口与实现分离,继承可定义相似的类型并对相似关系建模.
2020-08-17 10:43:34
492
原创 C++ Primer:第14章 重载运算与类型转换
第14章 重载运算与类型转换要求运算符可以重载+ - * / % ^ \| ~ = ++ --+= -= *= /= %= ^= \|= &=! < > <= >= == != << >> <<= >>=-> ->* [] () new new[] delete delete[]不建议重载, & && \|\|不能重载:: .* . ?:必须是成员
2020-07-28 14:19:50
378
原创 C++ Primer:第13章 拷贝控制
第13章 拷贝控制拷贝控制操作:拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符、析构函数。当类中没有声明构造函数时,编译器会在其需要时生成合成默认构造函数。当类中没有定义拷贝构造函数时,编译器生成合成拷贝构造函数。合成拷贝赋值运算符、合成析构函数与合成拷贝构造函数类似。当类中没有自定义拷贝控制成员,且每个非static数据成员都可以移动时,编译器才会合成移动构造函数或移动赋值运算符。若一个类需要析构函数,则几乎肯定需要拷贝构造函数、拷贝赋值运算符;若一个类需要拷贝构造函数,则几乎肯定需.
2020-07-23 09:00:40
484
原创 学习OpenCV3: 第4章 图像和大型数组类型
1、稠密数组cv::Matcv::Mat构造函数示例默认构造函数cv::Mat构造二维数组cv::Mat(int rows, int cols, int type)cv::Mat(int rows, int cols, int type, const Scalar &s)cv::Mat(int rows, int cols, int type, void *data, size_t step=AUTO_STEP)cv::Mat(cv::Size sz, int ty.
2020-07-13 13:53:08
393
原创 学习OpenCV3:=、clone、copyTo的区别
1、=#include <opencv2/opencv.hpp>using namespace cv;#include <iostream>using namespace std;int main(){ Mat img1(300, 300, CV_32FC3, Scalar(1, 0, 0)); Mat img2(200, 200, CV_32FC3, Scalar(0, 1, 0)); Mat roi = img1(Rect(50, 50, .
2020-07-13 08:26:09
1955
2
原创 学习OpenCV3: DataType「Complexf」无法访问成员type和depth
1、背景#include <iostream>using namespace std;#include <opencv2/opencv.hpp>using namespace cv;int main(){ int rows = 5, cols = 5; Mat m = Mat::eye(rows, cols, DataType<Complexf>::type); for (size_t i = 0; i < rows; ++i)
2020-07-09 14:21:03
602
1
原创 学习OpenCV3:OpenCV3.4.10的Scalar无法画出部分对应的颜色
1、背景 现希望在白色背景图片上画出两条平行线,其颜色分别为蓝色和紫色。编写如下程序,发现可以画出蓝线,但画不出紫线。#include <opencv2/opencv.hpp>using namespace cv;int main(){ Mat img(400, 600, CV_32FC3, Scalar(255, 255, 255)); // 白色背景图片 line(img, Point(0, 100), Point(600, 1.
2020-07-09 09:57:15
821
原创 学习OpenCV3:第3章 了解OpenCV的数据类型
1、OpenCV的数据类型根据组织结构,OpenCV的数据类型主页分成三类:直接从C=++原语中继承的基本数据类型,如int、float、数组、矩阵等;辅助对象,如垃圾收集指针类、用于数据切片的范围对象、抽象的终止条件等;大型数组类型,如cv::Mat、cv::SparseMat。基本数据类型:cv::Point、cv::Size、cv::Rect、cv::RotateRect、固定矩形类cv::Matx、固定向量类cv::Vec、cv::Scalar。访问成员:cv::Point、cv::Siz.
2020-07-08 10:49:21
394
原创 学习OpenCV3:判断两条直线相交,并计算交点和夹角
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否相交。若相交,计算出两条直线的交点和夹角。二、分析1、直线方程y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1k=−.
2020-07-07 09:34:37
8334
1
原创 学习OpenCV3:画带箭头的直线
一、问题 现有一条直线p1p2p_1p_2p1p2,给定箭头角度angle,长度length,颜色color和厚度thickness,要求在p2p_2p2画出箭头。二、分析: 已知角度angle和长度length,可求出l1和l2: double l1 = length * cos(angle * CV_PI / 180), l2 = length * sin(angle * CV_PI / 180); 已知p1,p2和l1,可求出p0: int i = (p2.x.
2020-07-03 17:18:44
900
原创 高等数学:8.2 数量积、向量积、混合积
一、两向量的数量积 数量积:a⋅b=∣a∣∣b∣cosθ,a⋅a=∣a∣2\boldsymbol a \cdot \boldsymbol b=|\boldsymbol a||\boldsymbol b| \cos \theta, \quad \boldsymbol a \cdot \boldsymbol a=|\boldsymbol a|^2a⋅b=∣a∣∣b∣cosθ,a⋅a=∣a∣2 交换律:a⋅b=b⋅a\boldsymbol a \cdot \boldsymbol b=\bolds.
2020-07-03 09:34:48
3205
原创 高等数学:8.1 向量及其线性运算
一、向量向量(矢量):既有大小,又有方向的量,如位移、速度、加速度、力、力矩等。自由向量:与起点无关的向量,只考虑向量的大小和方向。零向量:模等于零的向量,起点和终点重合,方向任意。两向量共线:两向量的终点和公共起点在同一条直线上。k向量共面:向量的k个终点和公共起点在同一个平面上。二、向量的线性运算1、向量的加减法加法:a+b=c\boldsymbol a+ \boldsymbol b= \boldsymbol ca+b=c交换律:a+b=b+a\boldsymbol a+\bolds.
2020-07-02 11:49:32
4985
原创 学习OpenCV3:画出三角形,并计算3个角的大小
一、问题 已知三角形的3个点p0、p1和p2。现希望画出三角形,并计算3个角度的大小。二、分析 直线aaa的直线方程:y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1\frac{y-y_1}{y_2-y_1} = \frac{x-x_1}{x_2-x_1} \Rightarrow \begin{cases} ax+by+c=0 \\a=-(y_2-y_1) \\ b = x_2-x_1 .
2020-07-01 15:06:57
2637
1
原创 学习OpenCV3:画出代表夹角的圆弧
一、问题 已知3个点 g_center、g_p1和g_p2。其中g_center是夹角的中心点,g_center和g_p1组成夹角的起始边l1l_1l1,g_center和g_p2组成夹角的结束边l2l_2l2,现希望画出从l1l_1l1到l2l_2l2的夹角。二、分析 OpenCV中cv::ellipse()不止可以画椭圆,还可以画圆弧。bool ellipse(cv::Mat& img, // 画图的图片cv::Point .
2020-07-01 11:00:16
2933
原创 学习OpenCV3:判断两条直线平行,并计算平行距离
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否平行。若平行,计算出两条直线间的平行距离。二、分析y−y1y2−y1=x−x1x2−x1⇒{ax+by+c=0a=−(y2−y1)b=x2−x1c=(y2−y1)x1−(x2−x1)y1k=−ab\fra.
2020-06-30 09:46:19
5097
1
原创 学习OpenCV3:判断两条直线重合
一、问题 已知两条直线l1(x1,y1,x2,y2)l_1(x_1,y_1,x_2,y_2)l1(x1,y1,x2,y2)和l2(x3,y3,x4,y4)l_2(x_3,y_3,x_4,y_4)l2(x3,y3,x4,y4),现希望判断l1l_1l1与l2l_2l2间是否重合。二、分析 l1l_1l1的直线方程:y−y1y2−y1=x−x1x2−x1⇒{a1x+b1y+c1=0a1=−(y2−y1)b1=x2−x1c1=(y2−y1)x1−(x2−x1)y1\fra.
2020-06-27 10:30:01
3152
2
原创 学习OpenCV3:识别图片倾斜角度并自动旋转
一、背景 现有如下图片,希望能用鼠标画出矩形,在矩形中计算出图片的倾斜角度,并由此自动旋转使图片水平。二、实现源程序:#include <opencv2/opencv.hpp>#include <iostream>#include <string>#include <cmath>using namespace std;using namespace cv;// 全局变量Mat g_image_original, g_image_g.
2020-06-18 22:18:09
7561
1
原创 学习OpenCV3:计算点到直线的距离并画出垂线(含公式和推导)
一、背景 已知一个点p0(x0,y0)p_0(x_0,y_0)p0(x0,y0)和一条直线l1l_1l1。l1l_1l1由起点p1(x1,y1)p_1(x_1,y_1)p1(x1,y1)和终点p2(x2,y2)p_2(x_2,y_2)p2(x2,y2)组成。现希望先计算p0p_0p0在直线l1l_1l1上的垂足p3(x3,y3)p_3(x_3,y_3)p3(x3,y3)并画出垂线l2l_2l2,再计算p0p_0p0到l1l_1l1的距离ddd。当l1垂直x轴时.
2020-06-17 21:13:55
5581
原创 学习OpenCV3:在空白图片上画虚线
一、背景 在OpenCV中,可以画圆、线、矩形、椭圆和多边形,但并不能画出虚线,现希望通过OpenCV已有的函数画出由点或线组成的虚线。cv::circle() // 画一个简单圆cv::clipLine() // 判断一条直线是否在给定的矩形内cv::ellipse() // 画一个椭圆,可以倾斜,或者只有部分圆弧cv::ellipse2Poly() // 计算一个近似椭圆的多边形cv::fillConvexPoly() // 画一个填充的简单多边形cv::fillPoly() // 画.
2020-06-17 08:32:30
7386
1
原创 学习OpenCV3:warpAffine旋转图片,鼠标操作截图
1、背景 现有如下一张图片,发现其图案与图片并不平行,故希望先通过滑动条旋转图片角度使图案水平,再将旋转好后的图片截图保存下来。测试图片:2、实现初始版本:实现图片旋转功能。缺陷:旋转时超出图片大小的部分无法显示。#include <opencv2/opencv.hpp>#include <iostream>#include <string>#include <cmath>// 全局变量cv::Mat g_image_origin.
2020-06-16 11:35:53
526
原创 学习OpenCV3:形参是Mat,*Mat,&Mat时图片变化情况
#include <opencv2/opencv.hpp>#include <iostream>#include <string>using namespace std;using namespace cv;void draw1(Mat img){ int y = 20; line(img, cv::Point(0, y), cv::Point(img.cols, y), cv::Scalar(255, 0, 0), 2); //画蓝线}.
2020-06-11 14:25:55
1286
原创 学习OpenCV3:使用=、clone、copyTo赋值时图片变化情况
#include <opencv2/opencv.hpp>#include <iostream>using namespace std;using namespace cv;int main(){ // 创建一张空白图片img int w = 400, h = 300; Mat img = Mat(h, w, CV_8UC3, Scalar(255, 255, 255)); // 在img1上画蓝线 int y = 50; .
2020-06-11 13:44:18
351
原创 学习OpenCV3:创建一张空白的图片并画线
1、背景 在OpenCV中,图片的类型是cv::Mat,而cv::Mat可作为任意维度的数组使用。// 默认构造函数cv::Mat;// 指定类型的二维数组cv::Mat(int rows, int cols, int type);cv::Mat(cv::Size sz, int type);// 指定类型的二维数组,并指定初始值cv::Mat(int rows, int cols, int type, const cv::Scalar&s);cv::Mat(cv::Size .
2020-06-10 17:02:08
15093
原创 学习OpenCV3:Assertion failed错误
1、背景 最近编写如下代码,运行时窗口一闪而过,最后终端报出错误Assertion failed (!fixedSize() || ((Mat*)obj)->size.operator()() == _sz) in create。#include <opencv2/opencv.hpp>#include <iostream>#include <string>int main(){ const std::string name = "imag.
2020-06-10 16:27:34
5176
原创 C++错误:标准头文件引用错误
1、背景 现希望引用标准头文件来计算4的根号和平方,编写如下代码,但发现引入标准头文件错误。#include <math>#include <iostream>using namespace std;int main(){ cout << "根号:" << sqrt(4) << endl; cout << "平方:" << pow(4, 2) << endl; retur.
2020-06-05 12:02:00
2221
原创 机器视觉算法与应用:3.1 基本数据结构
3.1 基本数据结构3.1.1 图像1、黑白摄像机返回每个像素对应的一个采样结果,并由此组成一幅单通道灰度图像。RGB彩色摄像机返回每个像素对应的三个采样结果,并由此组成一幅三通道图像。图像可被视为由一组任意多的通道组成。2、图像通道可以被简单看作一个二维数组。图像可以看作一个在空间上采样的函数,或者无限连续域上的函数。3.1.2 区域1、区域可表示一幅图像中一个任意的像素子集。将区域延伸到图像边界外,可将区域定义为离散平面的一个任意子集。2、图像可视为从某一感兴趣区域到某一数据集的函数,该感.
2020-06-04 09:23:28
521
2
原创 机器视觉算法与应用:2.5 三维图像采集设备
2.5 三维图像采集设备三维重构基于两种基本原理: 三角测量法和飞行时间测量法。三角测量法定理: 对于一个三角形,已知两点的坐标及夹角,可计算出第三点的坐标。飞行时间测量法原理: 摄像机发出辐射,测量辐射反射回传感器所经过的时间。1、进行三维重构前,必须标定摄像机以及确定摄像机之间的相对方位。2.5.1 立体视觉传感器视差: 使用两台不同视角的摄像机采集同一场景时,距离摄像机某个距离的某个点会在会在两台摄像机图像上不同的位置成像。基线: 三角形的已知边,即摄像机两个投.
2020-06-03 16:05:03
1258
原创 机器视觉算法与应用:2.4 摄像机-计算机接口
2.4 摄像机-计算机接口作用:1、将模拟或数字视频信号传送到计算机,并重构成灰度或彩色矩阵图像。所需设备:1、模拟视频信号需要图像采集卡,数字视频信号需要图像采集卡或某种标准接口卡,如IEEE1394卡、USB卡和千兆网卡。2.4.1 模拟视频信号1、模拟视频传输会导致图像质量变差,降低测量准确度和精度,而数字视频可避免此类问题,故机器视觉常用数字信号传输。模拟视频标准:1、EIA-170和CCIR是黑白视频标准,NTSC和PAL是彩色视频标准。2、EIA-170和CCIR的图像都是.
2020-06-02 15:14:51
1678
原创 VS Code:Python代码过长导致格式化时自动换行?
1、背景 平常写在VSCode写python程序并不关心每行的字符个数限制或者允许长度。而且对于过长代码,VSCode也能通过格式化工具较好地调整代码格式。现有如下代码,发现格式化后的结果并不理想。g_location_xy, g_location_wh = [0, 0], [0, 0]if __name__ == "__main__": print(g_location_xy[0] + g_location_xy[1] + g_location_wh[0] + g_location_wh.
2020-06-01 16:20:51
11833
3
原创 VS Code:编译运行根目录下不同文件夹中的文件
#1、背景 工作目录下含有3个文件夹,其中.vscode用于存放配置文件,a存放头文件a1.h,b存放源文件b1.c。b1.c引用a1.h,现希望编译运行b1.c。文件目录:a1.h:int g_a = 1;b1.c:#include <stdio.h>#include <a1.h>int main(){ printf("%d", g_a); return 1;}2、分析.vscode下的配置文件:1、c_cpp_properti.
2020-05-29 10:10:51
11280
2
原创 机器视觉算法与应用:Mardown+LaTeX常用数学符号
提示:1、在句中插入数学符号使用**∗∗;数学符号单独成行并居中对齐使用∗∗**;数学符号单独成行并居中对齐使用**∗∗;数学符号单独成行并居中对齐使用∗∗$$。2、换行使用\\,间隔使用\quad**。$a$$$a \quad b\\ c$$演示结果:aaaabca \quad b\\ cabc文本/数学模式通用符号表示{}\{\}{}\{ \}%\%%\%ξ\xiξ\S…\dots…\dots⋯\cdots⋯\cdot.
2020-05-27 11:34:49
729
原创 机器视觉算法与应用:2.3 摄像机
2.3 摄像机摄像机作用:将通过镜头聚焦于像平面的光线生成图像。数字传感器技术:1、电荷耦合器件CCD(charge coupled device)2、互补金属氧化半导体CMOS(complementary metal oxide semiconductor)3、CCD与CMOS主要区别:读出结构(从芯片中读取数据的方式)不同。2.3.1 CCD传感器线阵传感器功能:只能生成一个像素高度的图像。要求:1、为获取二维图像,线阵传感器必须相对于被测物运动。2、为获取矩形像素,传感器必须与
2020-05-27 08:38:50
971
new template.zip
2019-12-24
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人