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

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*BConvertRGB2GRAY(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.mzph.cn/pingmian/50027.shtml

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

相关文章

Golang | Leetcode Golang题解之第283题移动零

题目&#xff1a; 题解&#xff1a; func moveZeroes(nums []int) {left, right, n : 0, 0, len(nums)for right < n {if nums[right] ! 0 {nums[left], nums[right] nums[right], nums[left]left}right} }

单证不一致清关难题 | 国际贸易综合服务平台 | 箱讯科技

什么是单证一致&#xff1f; 单证一致出口方所提供的所有单据要严格符合进口方开证银行所开信用证的要求&#xff0c;或者说出口方制作和提供的所有与本项货物买卖有关的单据&#xff0c;与进口方申请开立的信用证对单据的要求完全吻合&#xff0c;没有矛盾。 添加图片注释&am…

【Stable Diffusion】(基础篇四)—— 模型

模型 本系列博客笔记主要参考B站nenly同学的视频教程&#xff0c;传送门&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 本文主要讲解如何下载和使…

Spire.PDF for .NET【文档操作】演示:在 PDF 中添加、隐藏或删除图层

PDF 图层是一种将 PDF 文件的内容按图层排列的功能&#xff0c;允许用户在同一个 PDF 文件中选择性地将某些内容设置为可见&#xff0c;将其他内容设置为不可见。PDF 图层是分层艺术品、地图和 CAD 图纸中使用的常见元素。本文将演示如何使用Spire.PDF for .NET以编程方式在 PD…

分类常用的评价指标-二分类/多分类

二分类常用的性能度量指标 精确率、召回率、F1、TPR、FPR、AUC、PR曲线、ROC曲线、混淆矩阵 「精确率」查准率 PrecisionTP/(TPFP) 「召回率」查全率RecallTP/(TPFN) 「真正例率」即为正例被判断为正例的概率TPRTP/(TPFN) 「假正例率」即为反例被判断为正例的概率FPRFP/(TNFP)…

唯众物联网(IOT)全功能综合实训教学解决方案

一、引言 在信息技术日新月异的今天&#xff0c;物联网&#xff08;IoT&#xff09;作为推动数字化转型的关键力量&#xff0c;其触角已延伸至我们生活的方方面面&#xff0c;深刻地重塑了工作模式、生活习惯乃至社会结构的每一个角落。面对这一前所未有的变革浪潮&#xff0c…

Java的类加载机制

Java的类加载机制是指将类的字节码文件&#xff08;.class文件&#xff09;加载到JVM中并将其转换为Class对象的过程。这个过程由类加载器&#xff08;ClassLoader&#xff09;完成。Java的类加载机制具有动态性和灵活性&#xff0c;使得Java能够支持动态加载类、实现模块化开发…

day4 vue2以及ElementUI

创建vue2项目 可能用到的命令行们 vue create 项目名称 // 创建项目 cd 项目名称 // 只有进入项目下&#xff0c;才能运行 npm run serve // 运行项目 D: //切换盘符 更改 Vue项目的端口配置 基础语法 项目创建完成之后&#xff0c;会有一个组件HelloWorld.vue&#xff0c;…

推动智慧交通建设,边缘计算赋能交通信号灯数据处理与决策能力

随着智慧城市建设的快速发展&#xff0c;智慧交通已成为城市发展的重要组成项目。智慧交通旨在通过大数据、人工智能、物联网等先进技术&#xff0c;实现交通系统的全面感知、智能分析、主动服务和协同管理。边缘计算在交通信号灯物联网应用中展现了交通信号灯数据处理与决策能…

手机怎么设置不同的ip地址

在数字化日益深入的今天&#xff0c;智能手机已成为我们生活、工作和学习中不可或缺的设备。然而&#xff0c;随着网络应用的广泛和深入&#xff0c;我们有时需要为手机设置不同的IP地址来满足特定需求。比如&#xff0c;避免网络限制、提高网络安全、或者进行网络测试等。本文…

内网对抗-隧道技术篇防火墙组策略HTTP反向SSH转发出网穿透CrossC2解决方案

知识点&#xff1a; 1、C2/C2上线-CrossC2插件-多系统平台支持 2、隧道技术篇-应用层-SSH协议-判断&封装&建立&穿透 3、隧道技术篇-应用层-HTTP协议-判断&封装&建立&穿透隧道技术主要解决网络通讯问题&#xff1a;遇到防火墙就用隧道技术&#xff0c;…

Ubuntu设置网络

进入网络配置文件夹 cd /etc/netplan 使用 vim 打开下的配置文件 打开后的配置 配置说明&#xff1a; network:# 网络配置部分ethernets:# 配置名为ens33的以太网接口ens33:addresses:# 为ens33接口分配IP地址192.168.220.30&#xff0c;子网掩码为24位- 192.168.220.30/24n…

软考-软件设计师(3)-数据结构与算法:树、图、队列、查找算法、排序算法、霍夫曼编码/树、环路复杂性、算法/时间复杂度/空间复杂度等高频考点

场景 软考-软件设计师-数据结构与算法模块高频考点整理。 以下为高频考点、知识点汇总,不代表该模块所有知识点覆盖,请以官方教程提纲为准。 注: 博客:霸道流氓气质-CSDN博客 实现 知识点 树:节点的度、树的度、深度、高度、满二叉树、完全二叉树、平衡二叉树、B树…

利用宝塔部署前后端分离springboot项目,以EasyPan为例

前置准备 服务器购买 请参考其他教程&#xff0c;这里不再赘述。 项目 部署到服务器前请确保项目在本地运行正常 安装宝塔面板 宝塔Linux面板的安装配置以及基本使用教程&#xff08;超详细&#xff09;_宝塔linux面板新手使用教程-CSDN博客 sql文件 IDEA中怎样导出数据…

删除的视频怎样才能恢复?详尽指南

在日常生活中&#xff0c;我们有时会不小心删除一些重要的视频文件&#xff0c;或者在整理存储空间时不慎丢失了珍贵的记忆片段。这时候&#xff0c;我们可以通过一些数据恢复工具和技巧&#xff0c;找回这些被删除的视频。本文将详细介绍几种常见且有效的视频恢复方法&#xf…

Vue与ASP.NET Core Web Api设置localhost与本地ip地址皆可访问

Vue的设置 我们创建并启动一个Vue项目&#xff0c;如下所示&#xff1a; 打开cmd&#xff0c;输入ipconfig查询本地ip地址&#xff1a; 想通过本地ip地址访问&#xff0c;把localhost改成本地ip地址&#xff0c;发现打不开&#xff1a; 这是因为Vue项目默认只有localhost&…

【Linux】进程IO|重定向|缓冲区|dup2|dup|用户级缓冲区|模拟缓冲区

目录 前言 重定向 实验一 为什么log.txt文件的文件描述符是1 为什么向stdout打印的信息也出现在文件中 实验二 用户级缓冲区 为什么要有用户级缓冲区 系统调用 dup 为什么close(fd1)之后还能向log.txt写入数据&#xff1f; dup2 缓冲区 观察现象 测试1 测试2 测…

C++初阶学习第三弹——类与对象(上)

目录 一.初步认知对象 二.类的基本组成、 1.类的定义 2.类的访问限定符及封装 3.类的作用域 4、类的大小的计算 5.this指针 三.总结 一.初步认知对象 C语言是面向过程的&#xff0c;关注的是过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用逐步解决问题。…

Linux下普通用户无法执行sudo指令

当执行sudo指令时出现&#xff1a; xxx&#xff08;普通用户名字&#xff09; is not in the sudoers file 说明在/etc/sudoers文件中没有把xxx加入到可执行sudo指令的名单中&#xff0c;因此需要修改sudoers文件。 解决方法&#xff1a;1、vim /etc/sudoers &#xff08;要…

什么是hdfs如何使用驱动程序访问hdfs

目录 什么是hdfs 主要特点包括&#xff1a; 架构组成&#xff1a; 应用场景&#xff1a; 如何使用驱动程序访问hdfs 准备工作环境&#xff1a; 启动 Hadoop 服务 可能遇到的问题&#xff1a; ssh验证失败 验证Hadoop服务 对hdfs进行文件操作 什么是hdfs HDFS&#x…