使用 Visual Studio 2022 自带的 cl.exe 测试编译 opencv helloworld

news2024/9/27 21:23:23

1. 参考博客:https://blog.csdn.net/yangSHU21/article/details/130237669( 利用OpenCV把一幅彩色图像转换成灰度图 )( 代码用的此博客的,就改了下图片文件路径而已 )。

2. 编译探索步骤:

test.cpp:

#include <iostream>
#include "opencv2/opencv.hpp"
 
using namespace cv;
using namespace std;
 
void opencv_test();
void ConvertRGB2GRAY(const Mat& image, Mat& imageGray);
 
void opencv_test() {
	Mat src = imread("D:/sucai/picture/bizhi/0001.jpg");
	Mat src0 = imread("D:/sucai/picture/bizhi/0001.jpg", 0);
	Mat grayImage;
	Mat cvt_gray_image;
 
	//读入的彩色图
	namedWindow("origin_image", WINDOW_NORMAL);
	imshow("origin_image", src);
 
	//opencv使用imread函数读入彩色图,设置第二个参数为0得到的灰度图
	namedWindow("opencv_image", WINDOW_NORMAL);
	imshow("opencv_image", src0);
 
	//使用公式GRAY=0.299*R+0.587*G+0.114*B
	ConvertRGB2GRAY(src, grayImage);
	namedWindow("my_gray_image", WINDOW_NORMAL);
	imshow("my_gray_image", grayImage);
 
	//先读入彩色图,然后使用cvtColor函数进行灰度转化
	cvtColor(src, cvt_gray_image, COLOR_BGR2GRAY);
	namedWindow("cvt_gray_image", WINDOW_NORMAL);
	imshow("cvt_gray_image", cvt_gray_image);
	waitKey(0);
}
 
void ConvertRGB2GRAY(const Mat& image, Mat& imageGray)
{
	if (!image.data || image.channels() != 3)
	{
		return;
	}
	//创建一张单通道的灰度图像
	imageGray = Mat::zeros(image.size(), CV_8UC1);
	//取出存储图像像素的数组的指针
	uchar* pointImage = image.data;
	uchar* pointImageGray = imageGray.data;
	//取出图像每行所占的字节数
	size_t stepImage = image.step;
	size_t stepImageGray = imageGray.step;
 
 
	for (int i = 0; i < imageGray.rows; i++)
	{
		for (int j = 0; j < imageGray.cols; j++)
		{
			//opencv的通道顺序是BGR,而不是我们常说的RGB顺序
			pointImageGray[i * stepImageGray + j] =
				(uchar)(0.114 * pointImage[i * stepImage + 3 * j] +
					0.587 * pointImage[i * stepImage + 3 * j + 1] +
					0.299 * pointImage[i * stepImage + 3 * j + 2]);
		}
	}
}
 
 
 
int main()
{
	cout << "Hello CMake." << endl;
	opencv_test();
	return 0;
}

直接使用 cl test.cpp 编译,报错 "test.cpp(1): fatal error C1034: iostream: 不包括路径集",使用 Everything 搜索 iostream 文件所在位置为 "D:\install\VisualStudio2022_comm\VC\Tools\MSVC\14.40.33807\include",于是将 cl 语句中加入:

-I"D:/install/VisualStudio2022_comm/VC/Tools/MSVC/14.40.33807/include" ^

执行,报错 " fatal error C1083: 无法打开包括文件: “crtdbg.h”: No such file or directory",搜索 crtdbg.h 的位置为 C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\ucrt,向 cl 语句中加入 :

-I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt" ^

执行,报错 "无法打开包括文件: “opencv2/opencv.hpp”: No such file or directory",这个我知道在哪,就不用搜了,当然你也可以搜索,向 cl 语句中加入:

-I"D:/install/opencv/opencv/build/include" ^

执行,报错 "LINK : fatal error LNK1104: 无法打开文件“libcpmt.lib”",搜索 libcpmt.lib 的位置为 

D:\install\VisualStudio2022_comm\VC\Tools\MSVC\14.40.33807\lib\x64,于是向 cl 语句中加入:

-link libcpmt.lib ^
-LIBPATH:"D:/install/VisualStudio2022_comm/VC/Tools/MSVC/14.40.33807/lib/x64" ^

执行,报错 "LINK : fatal error LNK1104: 无法打开文件“kernel32.lib”",搜索 kernel32.lib 的位置为 

C:\Program Files (x86)\Windows Kits\10\Lib\10.0.26100.0\um\x64,于是向 cl 语句中加入:

-link kernel32.lib ^
-LIBPATH:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.26100.0/um/x64"

执行,报错 "LINK : fatal error LNK1104: 无法打开文件“libucrt.lib”",搜索 libucrt.lib 的位置为C:\Program Files (x86)\Windows Kits\10\Lib\10.0.26100.0\ucrt\x64,于是向 cl 语句中加入:

-link libucrt.lib ^
-LIBPATH:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.26100.0/ucrt/x64"

执行,报错:

test.obj
LINK : warning LNK4044: 无法识别的选项“/link”;已忽略
LINK : warning LNK4044: 无法识别的选项“/link”;已忽略
test.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl cv::Mat::Mat(void)" (??0Mat@cv@@QEAA@XZ),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "public: __cdecl cv::Mat::~Mat(void)" (??1Mat@cv@@QEAA@XZ),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "public: static class cv::MatExpr __cdecl cv::Mat::zeros(class cv::Size_<int>,int)" (?zeros@Mat@cv@@SA?AVMatExpr@2@V?$Size_@H@2@H@Z),函数 "void __cdecl ConvertRGB2GRAY(class cv::Mat const &,class cv::Mat &)" (?ConvertRGB2GRAY@@YAXAEBVMat@cv@@AEAV12@@Z) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "class cv::Mat __cdecl cv::imread(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?imread@cv@@YA?AVMat@1@AEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::namedWindow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)" (?namedWindow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "int __cdecl cv::waitKey(int)" (?waitKey@cv@@YAHH@Z),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::imshow(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,class cv::_InputArray const &)" (?imshow@cv@@YAXAEBV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@AEBV_InputArray@1@@Z),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.obj : error LNK2019: 无法解析的外部符号 "void __cdecl cv::cvtColor(class cv::_InputArray const &,class cv::_OutputArray const &,int,int)" (?cvtColor@cv@@YAXAEBV_InputArray@1@AEBV_OutputArray@1@HH@Z),函数 "void __cdecl opencv_test(void)" (?opencv_test@@YAXXZ) 中引用了该符号
test.exe : fatal error LNK1120: 8 个无法解析的外部命令

这个错就看不懂了,不是简单的 xxx 文件找不到活无法打开了,否则我使用 Everything 搜出来都给添加到头文件包含目录以及静态库和静态库目录,经过这几天的研究,我发现缺少的系统的文件( 例如 windows系统的头文件、库文件等,或者 vs2022自带的头文件、库文件等,例如 opencv 、tensorRT等的就不算是系统文件 )会报错 xxx 文件找不到,但是第三方的的文件不会提示这么明显的报错,但是我们知道我们此刻是在使用什么,当然是 opencv 了,缺少的要么是头文件,要么是库文件,头文件目录前面已经设置了,那肯定是库文件了,打开 opencv 的静态库文件目录 D:\install\opencv\opencv\build\x64\vc16\lib:

 将该目录下的 .lib 文件加进去,即向 cl 语句中添加如下信息:

-link opencv_world4100.lib ^
-link opencv_world4100d.lib ^
-LIBPATH:"D:/install/opencv/opencv/build/x64/vc16/lib" ^

执行,成功生成了 test.exe,最终的 cl 编译语句为:

cl ^
	-I"D:/install/VisualStudio2022_comm/VC/Tools/MSVC/14.40.33807/include" ^
	-I"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt" ^
	-I"D:/install/opencv/opencv/build/include" ^
    test.cpp ^
	-link libcpmt.lib ^
	-link kernel32.lib ^
	-link libucrt.lib ^
	-link opencv_world4100.lib ^
	-link opencv_world4100d.lib ^
	-LIBPATH:"D:/install/VisualStudio2022_comm/VC/Tools/MSVC/14.40.33807/lib/x64" ^
	-LIBPATH:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.26100.0/um/x64" ^
	-LIBPATH:"C:/Program Files (x86)/Windows Kits/10/Lib/10.0.26100.0/ucrt/x64" ^
	-LIBPATH:"D:/install/opencv/opencv/build/x64/vc16/lib"

执行 test.exe:

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

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

相关文章

三维点云深度网络 PointNeXt 的安装配置与测试

Title: 三维点云深度网络 PointNeXt 的安装配置与测试 文章目录 前言I. 环境创建1. 容器创建2. 容器中安装 CUDA Toolkit 11.3 II. 安装过程1. 安装 PointNeXt2. 解决安装问题 III. 数据准备1. 数据准备的执行2. 数据准备的原理 IV. 运行测试1. 显存溢出2. 训练3. 测试4. 标注颜…

UDP/TCP协议解析

我最近开了几个专栏&#xff0c;诚信互三&#xff01; > |||《算法专栏》&#xff1a;&#xff1a;刷题教程来自网站《代码随想录》。||| > |||《C专栏》&#xff1a;&#xff1a;记录我学习C的经历&#xff0c;看完你一定会有收获。||| > |||《Linux专栏》&#xff1…

mysql一个小问题引发的思考-mysql类型转换-查询缓存 及 MYSQL查询缓存以及自动选择不使用查询缓存的情况

一、mysql一个小问题引发的思考-mysql类型转换-查询缓存 最近在做的一个项目中有一个SQL语句发现点问题&#xff0c;大概如下&#xff1a; select * from table where cid0 or find_in_set(1, cid); 数据表中的字段cid是字符串类型&#xff0c;原来的后端同学未提过此字段还能是…

Pytorch使用教学3-特殊张量的创建与类型转化

1 特殊张量的创建 与numpy类似&#xff0c;PyTorch中的张量也有很多特殊创建的形式。 zeros:全0张量 # 形状为2行3列 torch.zeros([2, 3]) # tensor([[0., 0., 0.], # [0., 0., 0.]])ones:全1张量 # 形状为2行3列 torch.ones([2, 3]) # tensor([[1., 1., 1.], # …

IEC104转MQTT网关轻松将IEC104设备数据传输到Zabbix、阿里云、华为云、亚马逊AWS、ThingsBoard、Ignition云平台

随着工业4.0的深入发展和物联网技术的广泛应用&#xff0c;IEC 104&#xff08;IEC 60870-5-104&#xff09;作为电力系统中的重要通信协议&#xff0c;正逐步与各种现代监控、管理和云平台实现深度融合。IEC104转MQTT网关BE113作为这一融合过程中的关键设备&#xff0c;其能够…

人工智能:大语言模型提示注入攻击安全风险分析报告下载

大语言模型提示注入攻击安全风险分析报告下载 今天分享的是人工智能AI研究报告&#xff1a;《大语言模型提示注入攻击安全风险分析报告》。&#xff08;报告出品方&#xff1a;大数据协同安全技术国家工程研究中心安全大脑国家新一代人工智能开放创新平台&#xff09; 研究报告…

LeetCode24 两两交换链表中的节点

前言 题目&#xff1a; 24. 两两交换链表中的节点 文档&#xff1a; 代码随想录——两两交换链表中的节点 编程语言&#xff1a; C 解题状态&#xff1a; 没画图&#xff0c;被绕进去了… 思路 思路还是挺清晰的&#xff0c;就是简单的模拟&#xff0c;但是一定要搞清楚交换的…

路由表与IP数据报的转发

前言&#xff1a;本博客仅作记录学习使用&#xff0c;部分图片出自网络&#xff0c;如有侵犯您的权益&#xff0c;请联系删除 一、相关知识 1、路由类型 路由表中有3类路由&#xff1a;直连路由、静态路由、动态路由 直连路由&#xff1a;一般指去往路由器接口直接连接网络的…

Godot游戏制作 05收集物品

创建新场景&#xff0c;添加Area2D节点&#xff0c;AnimatedSprite2D节点 &#xff0c;CollisionShape2D节点 添加硬币 按F键居中&#xff0c;放大视图。设置动画速度设为10FPS&#xff0c;加载后自动播放&#xff0c;动画循环 碰撞形状设为圆形&#xff0c;修改Area2D节点为Co…

政安晨【零基础玩转各类开源AI项目】基于Ubuntu系统部署LivePortrait :通过缝合和重定向控制实现高效的肖像动画制作

目录 项目论文介绍 论文中实际开展的工作 非扩散性的肖像动画 基于扩散的肖像动画 方法论 基于Ubuntu的部署实践开始 1. 克隆代码并准备环境 2. 下载预训练权重 3. 推理 快速上手 驱动视频自动裁剪 运动模板制作 4. Gradio 界面 5. 推理速度评估 社区资源 政安…

Apollo部署与简易架构梳理

文章目录 apollo 安装apollo的基本架构组件机制component编译与加载 节点通讯数据的传输消息读写的实现消息的写端消息读端 常用术语ComponentChannelTaskNodeReader/WriterService/ClientParameter服务发现CRoutineSchedulerMessageDag文件Launch文件Record文件Mainboard Moni…

机会性加密技术:网络安全的新趋势

在当今数字化时代&#xff0c;网络安全已成为各行各业不可忽视的重要议题。随着网络攻击手段的不断演进&#xff0c;传统的加密方式已难以满足复杂多变的安全需求。机会性加密技术&#xff08;Opportunistic Encryption&#xff0c;简称OE&#xff09;&#xff0c;作为一种新兴…

快速入门Jupyter notebook

快速入门 Jupyter notebook 一、前言&#xff08;一&#xff09;优点&#xff08;二&#xff09;特点&#xff08;三&#xff09;调用运行&#xff08;四&#xff09;新建 二、认识界面快捷键&#xff08;一&#xff09;三种模式&#xff08;1&#xff09;蓝色模式&#xff1a;…

qt做的分页控件

介绍 qt做的分页控件 如何使用 创建 Pagination必须基于一个QWidget创建&#xff0c;否则会引发错误。 Pagination* pa new Pagination(QWidget*);设置总页数 Pagination需要设置一个总的页数&#xff0c;来初始化页码。 pa->SetTotalItem(count);设置可选的每页数量…

Spring中使用到的设计模式及其源码分析

前言 众所周知&#xff0c;Spring框架是一个强大而灵活的开发框架。这不&#xff0c;上次的面试刚问到这些&#xff0c;没防住&#xff01;&#xff01;&#xff01;因此下来总结一下。这篇文章主要介绍Spring中使用到的设计模式&#xff0c;自己做个面试复盘&#xff0c;同时…

51单片机嵌入式开发:19、STC89C52R控制LCD1602码表+数码管+后台数显(串口)

STC89C52R控制LCD1602码表数码管后台数显&#xff08;串口&#xff09; 1 概述1.1 项目概述1.2 项目组成部分1.3 功能描述 2 开发环境2.1 支持设备2.2 硬件电路 3 软件代码工程4 演示4.1 Proteus仿真4.2 实物演示 5 总结 1 概述 1.1 项目概述 本项目旨在利用STC89C52R单片机实…

C语言程序设计结构(未完待续...)

文章目录 **C**语言设计的核心&#xff08;灵魂&#xff09;**C**语言程序设计的设计结构顺序结构选择结构循环结构 **C**语言的语句 C语言设计的核心&#xff08;灵魂&#xff09; 程序 数据结构 算法 算法&#xff1a;对于问题解决的方法思路或者步骤 算法的特征&#x…

mac|安装PostgreSQL

1、官网下载&#xff1a;EDB: Open-Source, Enterprise Postgres Database Management 选择需要的版本&#xff1a; 双击得到的.dmg文件 双击&#xff0c;弹窗选择打开&#xff0c;一路next&#xff0c;然后输入你要设置的密码&#xff0c;默认账号名字为&#xff1a;postgres…

vite构建vue3项目hmr生效问题踩坑记录

vite构建vue3项目hmr生效问题踩坑记录 hmr的好处 以下是以表格形式呈现的前端开发中HMR&#xff08;热模块替换&#xff09;带来的好处&#xff1a; 好处描述提升开发效率允许开发者在不刷新整个页面的情况下实时更新修改的代码&#xff0c;减少等待时间保持应用状态在模块替…

一起学Java(1)-新建一个Gradle管理的Java项目

一时兴起&#xff0c;也为了便于跟大家同步学习进展和分享样例代码&#xff0c;遂决定创建一个全新的Java项目&#xff0c;并通过Github与大家分享。本文就是记录该项目的创建过程以及其中的一些知识要点&#xff08;如Gradle等&#xff09;。为了紧跟技术潮流和提高操作效率&a…