
C/C++代码
文章平均质量分 59
你好,明天,,
你好,明天。一个今天胜过两个明天。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
两遍扫描连通域标记算法(CCL)——C代码实现
两遍扫描连通域标记算法(CCL)是一种适合FPGA/嵌入式环境的替代递归flood_fill的方法。该算法通过两遍扫描完成:第一遍扫描赋予临时标签并记录等价关系,使用8邻域或4邻域检查邻居像素,通过并查集管理标签合并;第二遍扫描建立轮廓结构,将像素坐标添加到对应标签的轮廓点集中。算法最后会过滤过小轮廓(如少于3个像素点),输出有效的轮廓数组。该方法避免了递归调用,更适合硬件实现,同时保持了与flood_fill相同的轮廓提取效果。原创 2025-07-09 09:22:41 · 309 阅读 · 0 评论 -
findContours()边缘检测——C代码实现
OpenCV的findContours()函数用于检测二值图像中的轮廓。该函数要求输入为二值图像(前景255,背景0),通过扫描图像(从上到下、从左到右)寻找未访问的白色像素作为轮廓起点,然后使用边界跟踪算法(4/8邻域)进行轮廓检测。轮廓结果可保存为点集,并支持多种检索模式(如仅外部轮廓RETR_EXTERNAL或完整层级RETR_TREE)和近似方法(存储所有点或压缩冗余点)。文中还提供了C语言实现方案,使用栈结构进行深度优先搜索处理8邻域连通区域,并给出了完整的代码框架,包括图像加载、轮廓提取和内存管原创 2025-06-27 10:42:54 · 654 阅读 · 0 评论 -
形态学运算——C代码实现
摘要:形态学运算包含腐蚀(缩小亮区)、膨胀(扩大亮区)和开运算(腐蚀+膨胀)。圆盘结构元具有旋转对称性优势,能平滑边缘并保持圆形特征。通过调整半径可控制处理强度:小半径去噪,大半径分离物体。文中提供了C语言实现代码,包含腐蚀、膨胀和开运算函数,支持圆盘、矩形和十字结构元。开运算通过先腐蚀后膨胀实现,调用方法包括加载图像、处理并保存结果。原创 2025-06-13 14:45:23 · 372 阅读 · 0 评论 -
Sobel 算子边缘检测——C代码实现
Sobel算子是一种经典的边缘检测方法,通过两个3×3卷积核(水平方向Gx和垂直方向Gy)计算图像梯度,检测灰度变化剧烈的边缘区域。其核心思想是通过加权计算突出中心像素的重要性,提升抗噪能力。算法计算每个像素的梯度强度G=|Gx|+|Gy|,通过阈值处理生成边缘图像。优点包括计算简单、方向敏感性及一定抗噪性,但存在对模糊边缘和噪声敏感的缺点,常需配合平滑预处理使用。文中还提供了Sobel边缘检测的C语言实现代码示例。原创 2025-06-04 15:18:11 · 662 阅读 · 0 评论 -
计算机视觉中用到的差分划分通道二值化等方法——C语言代码实现
摘要:本文介绍在C语言环境中不使用OpenCV实现基础图像处理功能的方法。通过自定义Image结构体和stb_image库实现图像加载/保存,详细说明了通道拆分、差分运算和二值化等核心功能的纯C实现。重点包括:1)使用stb_image处理图像I/O;2)RGB通道分离的内存管理;3)两帧差分运算实现;4)两种二值化处理方式(阈值法和非零法)。代码示例展示了如何手动管理图像数据缓冲区并实现基本图像处理流程,为嵌入式等受限环境下的图像处理提供解决方案。原创 2025-05-30 15:39:17 · 420 阅读 · 0 评论 -
UDP编解码打包发送C++代码总结
本文介绍了UDP数据编码打包与解码处理的实现方法。主要内容包括:1) 通用UDP发送封装函数,实现socket初始化、数据发送和关闭功能;2) 数据包格式设计示例,包含4013字节的数据包结构;3) 使用LZ4压缩算法优化传输效率,压缩比可达100:1;4) 接收端解码实现,包含数据解压、校验和图像重组;5) 跨平台兼容性处理,支持Windows和Linux系统。该方案通过压缩大幅降低了网络传输耗时,适用于需要高效传输二进制数据的应用场景。原创 2025-05-28 15:39:47 · 970 阅读 · 0 评论 -
OpenCV三维解算常用方法C++
函数的作用是将像素坐标转换为归一化相机坐标(normalized camera coordinates)。进行计算,这是一个标准的立体视觉技术,用于通过两个相机视角中的匹配点估算其三维坐标。归一化后的坐标,它们不再依赖于摄像机的焦距和像素比例,因此可以用于三角测量。通过 X′=X/W,Y′=Y/W,Z′=Z/W 得到真实的三维坐标。计算三维点的位置时,假设输入的点是在无畸变的相机坐标系下。,那么投影矩阵可以简化为 P=[R∣T](去除了相机内参)。这里的 (xc,yc) 是归一化相机坐标,表示。原创 2025-03-25 11:00:02 · 719 阅读 · 0 评论 -
双目系统求坐标系A到坐标系B的旋转矩阵和平移向量——C++代码实现
双目系统求解一个坐标系到另外一个坐标系的 R 和 T 最常用的方法是基于,这个方法在计算机视觉和 3D 配准中被广泛使用,也称为。需要有两个坐标系测量的点,至少有3组对应点(能够组成一个平面的点,即不是一条直线上的点),通过这几组对应点来求解旋转矩阵和平移矩阵。首先,计算和中点集的质心(中心点):然后,将点集转换为计算到的。原创 2025-03-04 17:28:45 · 545 阅读 · 0 评论 -
双目视觉三角测量C++代码实现&不使用OpenCV
这种方法的核心在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。其中,Pl[2, :] 表示投影矩阵Pl的第三行,而Pl[0, :]表示Pl的第一行,Pr[2, :]和Pr[1, :]分别表示矩阵Pr的第三行和第一行,X是需要解的三维点的齐次坐标。表示左相机在世界坐标系中的位置,这里以左相机为参考坐标系,R是右相机相对于左相机的旋转矩阵,T是右相机相对于左相机的平移向量。首先,左相机的投影矩阵Pl为。原创 2025-02-11 14:47:01 · 1023 阅读 · 0 评论 -
双线性插值——C语言代码
双线性插值是一种图像处理中的常用方法,用于在二维平面上根据邻近像素的值来估计目标像素的值。对于像素坐标的求解,为了使坐标计算的更准确,通常会采用插值的方式使边缘细化,同时避免锯齿状边缘。经过插值后可以生成介于原始像素值之间的平滑过渡,增强图像细节,使得边界更柔和,坐标更连续,减少锯齿效应。细分的倍数由新图像的尺寸决定。原创 2024-11-14 15:03:52 · 569 阅读 · 0 评论 -
彩色圆形检测函数不使用OpenCV——C语言代码
代码进行了几次修正,需要注意的是BMP图像是以左上角为原点,以向右为x轴正方向,向下为y轴正方向。在求解中心点坐标时需要注意。软件打开图像查看黄色矩形中心点像素坐标以检验检测结果。原创 2024-10-30 14:10:53 · 488 阅读 · 2 评论 -
彩色矩形检测函数不使用OpenCV——C语言代码
代码进行了几次修正,需要注意的是BMP图像是以左上角为原点,以向右为x轴正方向,向下为y轴正方向。在求解中心点坐标时需要注意。软件打开图像查看黄色矩形中心点像素坐标以检验检测结果。原创 2024-10-30 13:58:39 · 244 阅读 · 0 评论 -
双目视觉三角测量C语言代码实现&不使用OpenCV
在双目视觉系统中,三角测量是一种基于几何原理的三维重建技术,通过分析同一场景在两个不同视角下的二维图像来确定物体的三维坐标。这种方法的在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。代码方面,利用相机内参和对极几何关系,从二维像素坐标(u, v)解算出三维世界坐标(X, Y, Z)。通过相机内参矩阵,二维图像点被转换为相机坐标系下的射线。原创 2024-10-24 10:27:59 · 519 阅读 · 0 评论 -
C4996‘sprintf‘: This function or variable may be unsafe. Consider using sprintf_s instead.
将 sprintf 改为 sprintf_s,需要注意函数的结构也要修改,sprintf_s需要添加参数 sizeof(xxx)。是否添加 #define _CRT_SECURE_NO_WARNINGS 对代码报错无影响。还有一种解决方法是在文件头中添加。是否添加 #define _CRT_SECURE_NO_WARNINGS 对代码报错无影响。还有一种解决方法是在文件头中添加。将 fscanf 改为 fscanf_s。原创 2024-10-23 10:48:30 · 749 阅读 · 0 评论 -
OpenCV双目视觉三角测量代码实现C++
在双目视觉系统中,,通过分析同一场景在两个不同视角下的二维图像来确定物体的三维坐标。这种方法的核心在于利用摄像机的内参和相对位姿(由旋转矩阵和平移向量描述),将图像中的像素坐标转换为三维空间中的射线,并通过求解这些射线的交点来确定物体的空间位置。原创 2024-10-22 13:50:59 · 1185 阅读 · 0 评论 -
OpenCV双目相机外参标定C++
库实现双目测量系统外参标定过程。通过分析双目测量系统左右相机拍摄的棋盘格标定板图像,包括角点检测、立体标定、立体校正和畸变校正的步骤,获取左右相机的相对位置关系和姿态。检测每张图像中的棋盘格角点,并进行亚像素级精确化;根据左右相机的角点坐标、三维坐标、内参矩阵和畸变系数,计算旋转矩阵。输出为双目测量系统的标定结果,包括旋转矩阵、平移向量、投影矩阵和重投影矩阵,并通过。,利用最小二乘法最小化重投影误差;根据标定结果对图像进行畸变。展示校正后的图像和视差图,以评估标定质量。原创 2024-10-22 11:29:06 · 1090 阅读 · 0 评论 -
OpenCV单目相机内参标定C++
地,使用库函数检测两组图像(左右相机拍摄图像)中棋盘格的角点;对检测到的角点进行亚像素级别的精确化,以提高角点位置的准确性;根据左右相机拍摄的棋盘格图像及角点位置,计算出两个相机的内参矩阵及畸变系数;生成畸变校正和图像校正的映射表。是左右相机的内参矩阵和畸变系数,以及每幅图像的旋转向量和平移向量,最后计算并输出标定结果的总体平均误差,以评估标定过程的准确性。通过角点检测、亚像素角点定位、角点存储与三维坐标生成和摄像机标定分别获取左右相机的内参。原创 2024-10-22 10:49:00 · 698 阅读 · 0 评论 -
OpenCV未定义标识符CV_XXX
如果代码是基于旧版本的OpenCV编写的,而环境中安装的是一个更新的版本,可能会导致一些标识符被重命名或移除,导致不匹配情况。报错“未定义标识符CV_XXX”,即编译器找不到常量。原创 2024-10-22 10:11:41 · 506 阅读 · 0 评论 -
彩色椭圆及矩形检测函数不使用OpenCV——C语言代码实现
代码功能:基于颜色阈值检测图像中的椭圆或圆形,并输出椭圆或圆形的中心点坐标。代码不使用OpenCV,通过遍历像素实现。可以通过如下生成椭圆图像的代码来验证上述代码的功能。原创 2024-10-18 14:52:57 · 432 阅读 · 0 评论 -
生成包含彩色椭圆图像——C语言代码实现
示例代码生成1920*1080大小的.bmp彩色图像,图像中包含一个红色。椭圆的位置,大小,颜色可以根据需要修改。圆的位置,大小,颜色可以根据需要修改。,图像背景颜色为黑色。原创 2024-10-18 14:44:27 · 264 阅读 · 0 评论 -
ASCII码对照表
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。32~126(共95个)是字符(32是空格),其中48~57为0到9十个阿拉伯数字。65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。...原创 2021-03-16 10:34:13 · 656 阅读 · 0 评论 -
十进制转换二进制C++源代码(递归)
实现十进制转换为二进制的递归写法:以下是C++源代码:#include<stdio.h>#include<iostream>using namespace std;//十进制转换为二进制------递归void db(int n) { if(n==0) return ; else { db(n/2); cout<<n%2;...原创 2018-12-20 12:50:41 · 12069 阅读 · 1 评论 -
TCP数据传输——C++代码实现
以坐标数据为例,通过TCP协议向同一局域网下指定计算机传输数据。C++代码实现。原创 2024-10-10 16:06:54 · 979 阅读 · 0 评论 -
生成靶标图像代码——C语言代码实现
每张图像中包含两个靶标,第一组左右相机拍摄的图像包含靶标1和2,第二组包含靶标3和4。同时输出生成靶标的位置。两个相机在x轴方向上平移。原创 2024-09-30 15:43:12 · 507 阅读 · 0 评论 -
两帧BMP图像差分处理——C语言代码实现
第2中方法是根据既定的阈值进行二值化处理,下面这种方法是自适应阈值处理。以用时最短为目标,不进行灰度化等其他处理步骤。原创 2024-09-30 15:18:37 · 527 阅读 · 0 评论 -
C语言基础------基础编程题目总结
C语言编程经验总结:1.求某一整数的十位,先取余再除以10。2.求某一整数字符串各位之和,可以使用-'0'操作。#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ char s[100000]; int i,sum=0; scanf("%s",&s); i=strlen(s); for(int j=0;j<i;j++){ ...原创 2021-03-21 11:34:37 · 1023 阅读 · 0 评论 -
C语言经典算法100例
【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去 掉不满足条件的排列。2.程序源代码:#include "stdio.h"#include "conio.h"main(){ int i,j,k; printf("\n"); for(i=1;i<5;i++) /*以下为三重循环*/ for(j=1;j<5;j++) ...原创 2021-03-02 14:42:16 · 4789 阅读 · 0 评论 -
C语言基础------结构体共用体
#include <stdio.h>struct st{ int x;int*y;}*p ;int dt[4]= {10,20,30,40};struct st aa[4]= {50,&dt[0],60,&dt[1],70,&dt[2],80,&dt[3]};main(){p=aa;printf("%d\n",++(*p->y));}++(*p->y))首先这句中, '->' 比 '*' 优先级要高。先计算p->y..原创 2021-01-30 10:21:04 · 1968 阅读 · 1 评论 -
C语言基础------二维数组详解
二维数组在概念上是二维的,有行和列,但在内存中所有的数组元素都是连续排列的,如定义一个二维数组a:int a[3][4] = { {0, 1, 2, 3}, {4, 5, 6, 7}, {8, 9, 10, 11} };a的分布和矩阵类似:0 1 2 34 5 6 78 9 10 11但在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存:C语言中的二维数组是按行排列的,也就是先存放 a[0] 行,再存放 a[1] 行,最后存放 a[2] 行;每行中的...原创 2021-01-29 12:36:12 · 2290 阅读 · 0 评论 -
C语言基础------自增自减条件判断循环
简单来说:++i 和 i++ 在单独使用时,都表示 i=i+1;––i 和 i–– 在单独使用时,都表示 i=i–1。而 a=++i 就相当于 i=i+1,a=i;a=i++ 就相当于 a=i,i=i+1。 同理,a=––i 就相当于 i=i–1,a=i;a=i–– 就相当于 a=i,i=i–1。亦即++i或--i先增一(减一)再使用,i++或 i--先使用再增一(减一)。//求 1! + 2! + 3! + ... + n!# include <stdio.h>int main.原创 2021-01-26 12:35:39 · 2091 阅读 · 0 评论 -
C语言基础编程
1. 删除字符串s中的空格#include<stdio.h>int main(){ char s[]="hhhh hh h"; int i,j; for(i=j=0;s[i]!='\0';i++) if(s[i]!=' ') s[j++]=s[i]; else s[j]=s[i];//可以去掉本行代码 s[j]='\0'; //printf("%s",s); puts(s);//这两种方法均可 return 0;}2. 删除字符串s中所有的字符 ‘c’..原创 2021-01-25 12:44:51 · 387 阅读 · 0 评论 -
C语言基础------指针
指针类型是C语言提供的一种特殊的基本数据类型。指针类型的变量中存放的不是待操作的数据,而是那些待操作数据的存储地址。‘&’ 被称为取地址运算符,只有输入字符串时,不需要使用运算符 &,因为数组名就是数组存储空间的首地址。定义一个指针型变量的语法格式是:<数据类型> * <指针型变量名>; ‘*’ 与‘&’ 相反,它将返回指针型变量所指变量的内容,因此,又被称为取内容运算,如 *intptr = 30,*chptr = 'p';。 基于指针的数据访问就原创 2021-01-21 16:52:30 · 763 阅读 · 0 评论 -
C语言之随机数
某班级30名学生某门课程的考试成绩,通过随机函数生成30个成绩数据,打印输出,并判断是否存在考试不及格的学生。使用rand( )函数,用函数srand( )完成随机数的初始化,time( )函数为srand( )提供初值。#include<stdio.h>#include<stdlib.h>//标准函数rand、srand的使用要求包含头文件stdlib.h #include<time.h>#include<iostream>//C++头文件..原创 2021-01-18 16:03:55 · 572 阅读 · 0 评论 -
C语言基础------排序及字符串相关操作总结
C语言 选择排序(这里是由大到小排序):#include<stdio.h> #include<stdlib.h>void SelectSort(int a[],int n){ int i,j,k,t; for(i=0;i<n-1;i++){ // n个元素需要进行(n-1)趟比较 for(j=i+1;j<n;j++){ //先使k记录排序范围内的第一个元素的位置 k=i; //找出最大元素的位置,由k记录 if(a[j]原创 2021-01-15 11:02:37 · 409 阅读 · 0 评论 -
C语言经典编程案例
C语言经典编程:1.打印输出hello world#include<stdio.h>int main(){ printf("hello world"); return 0;}2.一个整数加上100是一个完全平方数,加上168又是一个完全平方数,输出该数#include<stdio.h>int main(){ int x; int n,m; int i,j; for(i=1;i<168/2+1;i++){ ...原创 2021-01-12 22:11:59 · 6533 阅读 · 1 评论 -
斐波那契数列(递归及非递归)C/C++实现
递归实现斐波那契数列以下是正确C++源代码:1.递归实现Fibonacci数列:#include<iostream> #include<stdio.h>using namespace std;//Fibonacci数列递归解法 C++ 实现int Fib(int n) { if(n==0) return 0; else if(...原创 2018-12-20 16:58:11 · 40517 阅读 · 2 评论 -
十进制转换二进制C++实现(非递归)
实现十进制转换为二进制非递归实现以下是C++源代码:#include<iostream> #include<stdio.h>using namespace std;//十进制 转换为 二进制------非递归 int DecToBin(int dec){ int result=0,temp=dec,j=1; while(temp) { resu...原创 2018-12-20 12:55:41 · 4303 阅读 · 1 评论 -
最小生成树------克鲁斯卡尔算法(数据结构)
树(Tree):如果一个无向连通图中不存在回路,则这种图称为树。生成树 (Spanning Tree):无向连通图G的一个子图如果是一颗包含G的所有顶点的树,则该子图称为G的生成树。生成树是连通图的极小连通子图。这里所谓极小是指:若在树中任意增加一条边,则将出现一条回路;若去掉一条边,将会使之变成非连通图。最小生成树(Minimum Spanning Tree,MST):或者称为...转载 2018-11-06 20:55:56 · 16203 阅读 · 1 评论 -
递归算法遍历二叉树(先序、中序、后序遍历二叉树,求树的深度,结点个数等)
递归实现二叉树基本操作源代码实现:#include<iostream>using namespace std;typedef struct node{ struct node * lchild; struct node * rchild; char data;}BiTreeNode,*BiTree;void CreateBiTree(BiTree &T...原创 2018-10-27 17:37:41 · 8958 阅读 · 2 评论 -
递归求N的阶乘
递归计算N的阶乘以下为源代码:#include<stdio.h>#include<iostream>using namespace std;int fact(int n){ if(n<0) cout<<"ERROR"<<endl; else if(n==1) return 1; else ...原创 2018-10-27 17:33:50 · 1591 阅读 · 0 评论