AI大模型教程
一起来学习

人工智能→计算机视觉经典入门趣味程序实现:图像读取、形状特征提取、在三维坐标系建模读取二维图像形状趣味启蒙(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)

今天我们来完成一个视觉领域有趣的基本入门级必备的功能程序开发(该程序之于视觉领域入门就好比“Hello world!”之于计算机编程入门):程序实现输入Input一张图像,输出Output该图像提取的形状特征,图像是RGB图,提取的图像形状特征表示是二维像素坐标特征;并且我们大家考虑一个问题就是如何将提取的二维像素坐标特征在三维领域读取出来。读者们,这就是一个入门级但是极为经典的如何读取一张图像,并且提取图像的形状特征,以往的帖子中到这里已经完成了,我们现在多考虑一步就是图像的二维像素坐标数据如何与立体三维点云数据进行转换的方法,因为随着人工智能AI的技术演进很多应用场景对计算机视觉领域的应用需求已经不仅仅只是满足一个二维的图像特征提取了,有一些场景还需要视觉提供三维特征尤其是Z轴深度特征值,鉴于这个实际情况我们就在这个初学的入门程序里面增添一个功能就是将提取的二维坐标序列通过设置特定Z平面的方式扩展到三维坐标系,当然实际的二维到三维是有专门的三维重建立体几何数学计算原理得来的,那个讲起来就海量知识了,本帖子只是启蒙性质的用通俗视角的浅显的来解读这从一/二维到三维的奥秘,让初学者就能窥测视觉一二三维的整体框架,由此有助于读者们后续学习过程中便于通向攀登珠峰的山脚小径。
借助于当前最流行的人工智能AGI通用/专用助手明星产品(例如DeepSeek/ChaGPT/文心一言/通义千问/豆包/腾讯元宝等)的辅助科研智能助手,我得以较快的保质保量的完成该部分工作。我们先写一个算法程序:实现输入一张图像Img,输出图像蛇的形状特征:形状特征提取包括边缘特征,并且保存为二维像素坐标点序列vector contours到文件中。

#include 
#include 
using namespace cv; 
using namespace std;
 //定义提取输入图像形状特征函数
Mat extractBodyContour(const Mat& image) {
   
    Mat gray, blurred, edges, contourImage;
    
    // 转换为灰度图
    cvtColor(image, gray, COLOR_BGR2GRAY);
    // 高斯模糊
    GaussianBlur(gray, blurred, Size(5, 5), 0);
    // Canny边缘检测
    Canny(blurred, edges, 50, 150); 
    // 查找人体形态
    vectorvectorPoint>> contours;
    findContours(edges, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
    // 创建空白图像
    contourImage = Mat::zeros(image.size(), image.type());
   // 绘制白色形态特征 (Scalar(255, 255, 255) 是白色)
   drawContours(contourImage, contours, -1, Scalar(255, 255, 255), 2

文章来源于互联网:人工智能→计算机视觉经典入门趣味程序实现:图像读取、形状特征提取、在三维坐标系建模读取二维图像形状趣味启蒙(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)

相关推荐: 【小白向】Java–文心一言API调用

一、什么是API         API(Application Programming Interface,应用程序编程接口)是一种定义软件组件之间如何交互的技术规范。它是一种软件中间件,使得不同的软件应用程序可以相互通信。API指定了请求的格式(如HTTP…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 人工智能→计算机视觉经典入门趣味程序实现:图像读取、形状特征提取、在三维坐标系建模读取二维图像形状趣味启蒙(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)

人工智能→计算机视觉经典程序实现2:在工程项目程序开发过程中的图像算法类、算子封装继承程序编写方法及调试(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)

人工智能→计算机视觉经典程序实现2-2:在工程项目程序开发过程中的图像算法类、算子封装继承程序编写方法及调试

前言

今天我们继续来学一个工程实践中的实用技能,该技能是身为人工智能领域算法、软件工程师等必备技能:也就是如何将一个编写好的算法程序函数进行封装实现,尤其是存在继承类关系的算子函数进行封装。初步入门该领域的读者可能疑惑了,什么是封装?熟悉面向对象编程的读者可能会首先想到:封装、继承和多态是面向对象开发的三大特性;而我们今天的实用技能涉及到其中两方面特性封装和继承。其实很容易理解:所谓封装就是可以通俗的理解为一种常规的加密技术,我们通常开发的算法函数算子能够看到函数名和函数体,也就是能看到算子函数的源码,实际的工程实践中在我们进行集成工作时,可能我们希望开发的算子函数在使用时只需要开放函数名和参数能够使用就行了,算子函数的函数体也就是函数源码部分进行封装后集成的用户非必要看到,只有开发人员能够从源程序看到源码的这样一种技术实现加密方式。该技术实现一定程度上在工程实践中将算法函数算子的开发成果进行加密保护,只在特定情况由开发人员进行查看和维护的技术实现方式,该方式具有安全性、灵活性和可维护性的平衡,简化代码复杂度,即高内聚低耦合。封装对于算法来讲就好比加密狗对于软件系统,都是一种对开发出来的软件算法进行知识产权保护的一种技术方法。
为了更好的掌握该项技能,我们采用《三步学会函数算子封装及继承类封装》的方法,由浅到深,由易到难,逐步深刻理解并且掌握该技能。第一步:也就是我们前篇学到的:先学习个简单的函数算子的封装,这里我们采用一个简单的函数运算算法算子(加法+减法-乘法*除法/四则运算算法)作为示例重点讲解如何对其进行封装的技能,这样更容易理解和掌握封装的知识技能点,简单的算子封装技能掌握了,那么具有难度的函数算子封装也就掌握了方法,再结合实践练习练习就会了,第二步我们再学习含有类函数的及其函数算子的封装,第三步我们最后再掌握带有继承类的函数算子的封装 。
那么今天我们就开始进行第二步的学习
今天我们来进行《三步学会函数算子封装及继承类封装》的第二步:类函数及其成员函数算子的封装知识学习,在我们学习本帖子之前建议大家先学完或者结合前篇《三步学会函数算子封装及继承类封装》的第一步:函数算子封装的帖子知识进行。

《三步学会函数算子封装及继承类封装》的第二步:类函数及其函数算子封装

1、编写类函数math_FormulaClass{}及其成员函数例如四则运算:加法、减法、乘法、除法程序

函数类名称math_FormulaClass,包含四个成员函数算子:
int math_FormulaClass::algorithm_Add(int a, int b);
int math_FormulaClass::algorithm_Sub(int a, int b);
int math_FormulaClass::algorithm_Mul(int a, int b);
int math_FormulaClass::algorithm_Div(int a, int b);

//声明函数类及成员函数
class math_FormulaClass {
public:
    math_FormulaClass();
    ~math_FormulaClass();
	
	int algorithm_Add(int a, int b);
	int algorithm_Sub(int a, int b);
	int algorithm_Mul(int a, int b);
	int algorithm_Div(int a, int b);
};

//定义函数类及成员函数
#include 

math_FormulaClass::math_FormulaClass() {}
math_FormulaClass::~math_FormulaClass() {}

int math_FormulaClass::algorithm_Add(int a, int b) {
    return a + b;
}

int math_FormulaClass::algorithm_Sub(int a, int b) {
    return a - b;
}

int math_FormulaClass::algorithm_Mul(int a, int b){
    return a * b;
}

	int math_FormulaClass::algorithm_Div(int a, int b){
	return a / b;
}
//完成类函数及成员函数算子声明和定义
2、编写封装算法程序对前面写好的函数类math_FormulaClass{}及其成员函数四则运算算子进行封装

(1)、创建函数类工程如图:

(2)、编写封装函数类及其成员函数四则运算算子程序:头文件,主程序文件,初始文件
头文件

// pch.h: 这是预编译标头文件。
#ifndef PCH_H
#define PCH_H

// 添加要在此处预编译的标头
#include "framework.h"
#pragma once
#ifdef MATH_FORMULACLASS_EXPORTS
#define MATH_FORMULACLASS_API __declspec(dllexport)
#else
#define MATH_FORMULACLASS_API __declspec(dllimport)
#endif

//声明函数类及成员函数
class MATH_FORMULACLASS_API math_FormulaClass {
public:
	math_FormulaClass();
	~math_FormulaClass();
	int algorithm_Add(int a, int b);
	int algorithm_Sub(int a, int b);
	int algorithm_Mul(int a, int b);
	int algorithm_Div(int a, int b);
};
#endif //PCH_H

主程序文件

// pch.cpp: 与预编译标头对应的源文件
#include "pch.h"
// 当使用预编译的头时,需要使用此源文件,编译才能成功。
#include 
math_FormulaClass::math_FormulaClass() {}
math_FormulaClass::~math_FormulaClass() {}

int math_FormulaClass::algorithm_Add(int a, int b) {
    return a + b;
}

int math_FormulaClass::algorithm_Sub(int a, int b) {
    return a - b;
}

int math_FormulaClass::algorithm_Mul(int a, int b) {
    return a * b;
}

int math_FormulaClass::algorithm_Div(int a, int b) {
    return a / b;
}

初始文件

// dllmain.cpp : 定义 DLL 应用程序的入口点。
#include "pch.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                     )
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

(3) 点击生成→生成解决方案,完成加减乘除四则运算的函数算子封装,得到生成文件供后续使用。

3、写个测试程序引用前面封装好的函数类math_FormulaClass{}中的成员函数四则运算算子,实现加减乘除四则运算功能。

(1)创建测试程序如图所示

// call_math_FormulaClass.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
#include 
#include 
using namespace std;
int main()
{
    std::cout  "Hello World!n";
    math_FormulaClass mathFormulaclass;

    int a = mathFormulaclass.algorithm_Add(2, 4);
    int b = mathFormulaclass.algorithm_Sub(4, 2);
    int c = mathFormulaclass.algorithm_Mul(4, 2);
    int d = mathFormulaclass.algorithm_Div(4, 2);

    cout  a  endl;
    cout  b  endl;
    cout  c  endl;
    cout  d  endl;
}
// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单


(2)头文件及动静态链接库:头文件(在动态库生成工程中找到),动态链接库文件,静态链接库文件;头文件添加到函数头文件引用处,动静态链接库放置到工程目录里面,同时配置环境变量:头文件,库文件;运行程序看函数算子运行结果。

我们到这里就完成了《三步学会函数算子封装及继承类封装》的第二步:类函数及其成员函数算子的封装知识学习,该《三步学会函数算子封装及继承类封装》当前是每一步用一个帖子来完成讲述。现在大家是否也看到了一个有趣的现象:编写的程序中并没有看到四则运算的类函数定义也就是源码,只是类函数实例化,并且引用了类成员函数,然后就通过添加头文件、环境变量配置动静态链接库的方式得到了类函数成员变量方法运行结果。读者朋友们,这个就是封装的神奇之处:把我们写的源程序中的类函数算子数据通过封装保密的方式写到了我们动静态链接库文件中,从而在我们使用时候只需要通过添加头文件对类函数及成员算子进行一个声明,动静态链接库添加路径,我们就能实现类函数的调用,正常的使用函数算法了。看到这里大家是否就更加理解了,封装同时还让程序类及成员算法算子集成开发更加简洁,类函数算子方法作为知识成果受到保密保护,同时实现了程序开发过程中高内聚,低耦合的特点,有利于程序算法的管理维护工作。

参考资料:
1、人工智能→计算机视觉经典程序实现2:在工程项目程序开发过程中的图像算法类、算子封装继承程序编写方法及软件调试
2、【2025最新版】人工智能AI→计算机视觉→机器视觉/深度学习/→在ImageNet等特定数据集的模型识别任务理论及实践:《科学技术与人文社科》(长期更新版)
3、C++ 创建静态链接库和动态链接库
4、动静态链接库封装方法

文章来源于互联网:人工智能→计算机视觉经典程序实现2:在工程项目程序开发过程中的图像算法类、算子封装继承程序编写方法及调试(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)

相关推荐: AIGC领域,文心一言的安全性与可靠性

AIGC领域,文心一言的安全性与可靠性:从技术架构到工程实践的深度解析 关键词:AIGC、文心一言、大模型安全、可靠性工程、内容安全、数据隐私、对抗鲁棒性 摘要:本文围绕百度文心一言(ERNIE Bot)在AIGC领域的安全性与可靠性展开深度技术解析。首先构建…

赞(0)
未经允许不得转载:5bei.cn大模型教程网 » 人工智能→计算机视觉经典程序实现2:在工程项目程序开发过程中的图像算法类、算子封装继承程序编写方法及调试(智能助手AGI加持DeepSeek/ChatGPT/文心一言/通义千问/豆包/腾讯元宝等)
分享到: 更多 (0)

AI大模型,我们的未来

小欢软考联系我们