【OpenCV图像处理系列一】OpenCV开发环境的安装与搭建(Ubuntu + Window都适用)

news2024/9/25 4:39:56

🔗 运行环境:OpenCV,Ubuntu,Windows

🚩 撰写作者:左手の明天

🥇 精选专栏:《python》

🔥  推荐专栏:《算法研究》

#### 防伪水印——左手の明天 ####

💗 大家好🤗🤗🤗,我是左手の明天!好久不见,今天开始开启新的篇章——OpenCV💗

📆  最近更新:2023 年 02 月 12 日,左手の明天的第 272 篇原创博客

📚 更新于专栏:OpenCV详解

#### 防伪水印——左手の明天 ####


1. Ubuntu 下编译 opencv 源代码(For linux & Android

1.1 下载 opencv 源码

Opencv 各个版本的下载地址:
(opencv 中文网): http://www.opencv.org.cn/index.php/Download
opencv 英文网): http://sourceforge.net/projects/opencvlibrary/files/
建立目录 ~/Opencv2.2
将其解压到 ~/Opencv2.2/OpenCV-2.2.0
并在 ~/Opencv2.2 中建立 opencv-build 目录,用来存放编译后的 opencv

1.2 下载安装 Cmake

下载网址: http://www.cmake.org/cmake/resources/software.html
这里采用命令行安装 Cmake 的方式
$ sudo apt-get install cmake
$ sudo apt-get install cmake-qt-gui

1.3 安装 ubuntu 下必要的库文件:

sudo apt-get install pkg-config libgtk2.0-dev libjpeg libtiff libjasper libpng zlib
openexr libjpeg-dev ffmpeg libgstreamer libv4l libv4l-0 libv4l-dev libxine unicap
libavformat-dev libswscale-dev swig libjpeg-progs build-essential python-numpy

可能会出现依赖包libjasper-dev无法安装的情况,出现错误提示:
E: Unable to locate package libjasper-dev
 
此时,可以分为两步完成:
(1) 首先安装除了libjasper-dev之外的所有包:
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
 
(2) 然后单独安装libjasper-dev包:
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

1.4 使用 Cmake 进行配置:

(1)打开 Cmake
$ cmake-gui

(2)进行配置:

首先按照之前建立的文件夹路径,选择好 opencv 源码路径和 build 路径
源码路径为: ~/Opencv2.2/OpenCV-2.2.0
Build 目标路径: ~/Opencv2.2/OpenCV-2.2.0
然后点击 Configure (可能需要点击两次),然后点击 Generate ,配置工作就完成了。
(可能使用 Cmake 进行配置就是为了生成面向不同开发目标平台的 Makefile ,之后再用编
译器编译出相应的 opencv 的库文件)

 

1.5 编译 opencv 生成 linux 下的 opencv 库文件

$ cd ~/2.2opencv/opencv-build/
~/2.2opencv/opencv-build$ make

编译完成后,执行安装命令将生成的库文件安装到 Ubuntu 系统的相应路径中去

~/2.2opencv/opencv-build$ make install

对于 Ubuntu

头文件会安装到: urs/local/include
库文件会安装到: usr/local/lib
至此 Opencv Linux 下的库文件就编译和安装完成了。可以使用 codeblocks 调用库文件进
Opencv 的开发。
编译中如果总是出错,有可能是选择的 Opencv 版本与 Ubuntu 中相关环境的版本不匹配,
所以最好选择 poencv2.2 或者是 opencv2.0

1.6 测试 linux Opencv 例程

终端下转到刚才解压的 OpenCV-2.2.0/samples/c 文件夹下,里面有一个 build_all.sh 脚本

执行它:bash ./build_all.sh,成功之后,ls命令查看,生成了一个facedetect执行文件,./facedetect 执行它!如果弹出一个捕捉脸部的窗口,就成功了。

$ cd /home/sunny/2.2opencv/OpenCV-2.2.0/samples/c
/2.2opencv/OpenCV-2.2.0/samples/c$ bash ./build_all.sh
/2.2opencv/OpenCV-2.2.0/samples/c$ ./facedetect
注:如果在最后执行 facedetect 时报错:./facedetect: error while loading shared libraries: libopencv_core.so.2.2: cannot open shared object file: No such file or directory
这是因为你没有装 ffmpeg,输入 sudo -apt-get install ffmpeg 安装,安装成功之后再执行
facedectect 即可!

1.7 Opencv For Android 的编译

1.7.1 安装 ndk

由于 Google 官方版本的 Android ndk 并不能完全支持所有的 C++ 特性,所以如果要使用
Opencv 就必须重新安装经过特殊修改的 ndk
下载网址: http://www.crystax.net/android/ndk-r4.php (注意选择相应的版本)
下载之后将其解压到自己的 home 目录。在家目录(~)下会生成 android-ndk-r4-crystax
目录。( 注: 这个目录是源码中相应 Makefile 配置的相应默认 NDK 目录)

1.7.2 安装 Android SDK

从 google 开发网站上下载 android SDK ,安装完整个 SDK 后,需要将 tools platform-tools
等工具的目录添加到系统的 PATH 环境变量中,方便之后在任意路径下使用 SDK 的相关工
具。

1.7.3 编译 opencv 中关于 android 相关的源码

1.7.3.1 静态库的编译

~$ cd 2.2opencv/OpenCV-2.2.0/android/
~/2.2opencv/OpenCV-2.2.0/android$ mkdir build
~/2.2opencv/OpenCV-2.2.0/android$ cd build/
~/2.2opencv/OpenCV-2.2.0/android/build$
~/2.2opencv/OpenCV-2.2.0/android/build$ cmake .. 
~/2.2opencv/OpenCV-2.2.0/android/build$ make

编译阶段会花费一些时间

1.7.3.2 共享库的编译

~$ cd 2.2opencv/OpenCV-2.2.0/android/android-jni
~/2.2opencv/OpenCV-2.2.0/android/android-jni$ make
首先进行 make 首次会提醒修改 local.env.mk ,这里就是进行配置 NDK 的相关的路径。
如果自己的 NDK 已经解压到了 ${HOME} 目录,就不需要进行修改:
local.env.mk 文件
路径为: /home/sunny/2.2opencv/OpenCV-2.2.0/android/android-jni/local.env.mk
文件内容如下:
#location of android-opencv.mk file that was generated by the cmake build
#of opencv for android
OPENCV_CONFIG=../build/android-opencv.mk

#the root directory of the crystax r4 ndk - ndk-build should be in this dir
#you can download the ndk from http://www.crystax.net/android/ndk-r4.php
ANDROID_NDK_ROOT=$(HOME)/android-ndk-r4-crystax

#define only armeabi-v7a to make the final apk smaller or armeabi
ARM_TARGETS="armeabi armeabi-v7a"

修改完路径之后,再次 make,就开始编译共享链接库了。

注意:每个工程文件的目录下都会由一个 local.env.mk 文件用于配置相关的 NDK 路径,在
下面编译例子程序 CvCamera 的时候也要注意。最好是将 NDK 解压到家目录,这样在以后
就不需要进行配置了。

1.7.3.3 安装 ant 进行 Java 相关的编译

ant 版本最好要 1.8 以上
~$ sudo apt-get install ant1.8

安装完成之后,就开始接着编译 Java 先关的部分:

~/2.2opencv/OpenCV-2.2.0/android/android-jni$ sh ./project_create.sh
~/2.2opencv/OpenCV-2.2.0/android/android-jni$ ant compile

至此 Opencv 中关于 Android 的相关代码就编译完成了。最终的生成文件可能是在:

~/2.2opencv/OpenCV-2.2.0/android/build/obj/local 目录中,这些在配置 eclipse+android+opencv 的开发环境会用到。(具体到时候再进行验证)
 
Opencv-2.2.0 _
    |_android_
        |_android-jni
        |_apps
        |_build
上面是 opencv 源码中 android 相关目录架构,其中 apps 目录下是一些 opencv android 的例子
程序。在 build 目录下是最终编译出来的相关库文件。

1.7.3.4 编译安装 android 下的测试程序 CVCamera

~$ cd 2.2opencv/OpenCV-2.2.0/android/apps/CVCamera/
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ sh build.sh
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ make

这一步主要是建立 swig wrappers and shared library.

SWIG 是一种简化脚本语言与 C/C++ 接口的开发工具。简而言之, SWIG 是一个通过包装和编译 C 语言程序来达到与脚本语言通讯目的的工具。)
接下来开始编译生成 android apk
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$sh project_create.sh
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ ant debug

这样就在当前目录下的 bin 目录生成了 debug 版的 apkCVCamera-debug.apk

执行下面的命令将 apk 安装到手机上(事先已经通过 USB 连接手机)
~/2.2opencv/OpenCV-2.2.0/android/apps/CVCamera$ ant install

上面的整个过程,既是用来检验 opencv 编译的是否成功也是 android opencv 编程及编译的

很好的例子。

2. Ubuntu 下 codeblocks Opencv 开发环境配置

linux PC 中使用 codeblocks IDE 进行 Opencv 的开发仅仅需要将上一章中编译生成的
Opencv 的头文件和库文件,加入编译搜索路径即可。

2.1 下载安装 codeblocks

网址: http://www.codeblocks.org/downloads/26
老版本: http://www.codeblocks.org/downloads/source/5
注意要下载稳定版 不要下载测试版或者 debug

2.2 打开 cldeblocks 建立一个摄像头的测试程序:

先在家目录下建立一个文件夹 workplace 专门用来存放 codeblocks 的工程文件。
建立的工程文件名为: camera_demo
测试代码如下:
#include<highgui.h>
int main()
{
    int c;
    IplImage *img;
    CvCapture* capture = cvCaptureFromCAM(-1);
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
    cvMoveWindow("mainWin", 50, 50);
    while(1)
    {
        img=cvQueryFrame(capture);
        cvShowImage("mainWin", img );
        c=cvWaitKey(10);
        
        //按 ESC 键离开
        if(c == 27)
            break;
    }
    cvReleaseImage(&img);
    cvDestroyWindow("mainWin");
    return 0;
}

2.3 配置工程的头文件和链接库

在左侧的 projects 窗口中在工程文件 camera_demo 上鼠标右键,然后选择 Build options ...
在弹出来的对话框中进行配置,左边是选择配置 Debug 版本还是 Release 版本,可以两个都
配置一遍。首先在 Linker settings 中点击 Add 按钮,添加 opencv 的库文件。
路径:/usr/local/lib ,将其中的所有 .so 文件都添加进来。

然后配置路径:

头文件路径:
Search directories 中选中 Compiler ,点击 Add 按钮,将两个 opencv 的头文件目录添加
路径: /usr/local/include/opencv
路径: /usr/local/include/opencv2
紧接着在 Linker 选项中点击 Add 按钮,将 lib 的路径添加
路径: /usr/local/lib
至此相关的配置就完成了,可以点击

 运行按钮,进行编译测试。

但是以上的配置都是针对本工程文件的,如果下次再新建工程就失效了。如果想要对全局生
效,就要在菜单栏的 Settings->Compiler...->Global compiler settings 重复设置刚才的过程:

 

相关参考网址:
编译 Ubuntu Opencv http://blog.csdn.net/huangmou37/article/details/6207800
编译 opencv forAndroid: http://hi.baidu.com/cwyalpha/item/b76f6cc0601a522def46652d
官方编译 for android http://opencv.willowgarage.com/wiki/Android2.2
官方配置 for codeblocks http://opencv.willowgarage.com/wiki/CodeBlocks
配置 for codeblocks http://blog.csdn.net/hitwengqi/article/details/7985343

 3. Windows7 + codeblocks Opencv 开发环境搭建

(注:以下的每个路径都需要根据自己安装时设置的路径进行修改)

3.1 下载 opencv2.2

网址: http://www.opencv.org.cn/index.php/Download#Version_2.2

直接下载网址:http://www.opencv.org.cn/download/OpenCV-2.2.0-win.zip

3.2 解 压 OpenCV-2.2.0-win.zip E:\OpenCV-2.2.0,并且建立空文件夹 E:\OpenCV-2.2.0-build

3.3 下载 CMake2.8

网址:http://www.cmake.org/cmake/resources/software.html

3.4 安装 CMake 按照默认的配置,一路 next

3.5 打开 CMake

在上面的两个路径中分别找到 opencv 的源代码目录 E:\OpenCV-2.2.0 ,和自己新建的空文件
E:\OpenCV-2.2.0-build ,这个目录用来生成 opencv 的编译结果。

3.6 环境变量的设置

本文之前已经安装好 codeblocks ,在其安装的目录下会有 MinGW 工具(即:即 Minimalist
GNU For Windows ),里面是用来编译 opencv 源码的编译工具。需要将他们的路径添加到系
统的环境变量 Path 中。(系统的 Path 或是当前用户的 Path 都行)

方法:

开始 -> 计算机 -> 右键 -> 属性 -> 高级系统设置 -> 环境变量
Path 中添加如下  C:\Program Files (x86)\CodeBlocks\MinGW\bin
( 注意各个路径之间需要使用英文的分号 隔开 )
MinGW 路径

 

环境变量的设置

 

3.7 在 CMake 中点击 configure

选择生成的目标平台为 codeblocks MinGW ,然后点击 FInish

configure 之后,再点击 generate 生成。这时 E:\OpenCV-2.2.0-build 下会生成 lib 目录。

3.8 编译 oepncv 源码

windows 键 +R ,打开 cmd 进入 windows 下的 DOS 命令行终端,在命令行下进入 E:\OpenCV-2.2.0-build 目录。

3.8.1 先进入 E

输入 E:

3.8.2 进入目录 OpenCV-2.2.0-build

输入 cd OpenCV-2.2.0-build

3.8.3 编译 opencv 源码

在命令行下输入 :mingw32-make

 然后需要等待很久,进行编译

3.8.4 安装 opencv 库文件

命令行下输入 mingw32-make install

 完成之后会在 OpenCV-2.2.0-build/lib 文件夹下会生成库文件:

 会在 OpenCV-2.2.0-build/include 文件加下会生成头文件:

3.9 使用 codeblocks 建立 openv 工程

打开 codeblocks ,菜单栏上: File->New->Project->Console application->C++

 

输入文件名(opencv_test),选择存放的目录,然后点击 Finish

3.10 测试代码

将测试代码粘贴到 main.cpp 文件中
#include <highgui.h>
int main()
{
    int c;
    IplImage *img;
    CvCapture* capture = cvCaptureFromCAM(-1);//此处-1 代表自动检测
    cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
    cvMoveWindow("mainWin", 50, 50);
    while(1)
    {
        img=cvQueryFrame(capture);
        cvShowImage("mainWin", img );
        c=cvWaitKey(10);
        if(c == 27)
            break;
    }
    cvReleaseImage(&img);
    cvDestroyWindow("mainWin");
    return 0;
}

但是此时编译还不能成功,因为 codeblocks 的编译器还不知道 opencv 的头文件和相应的库文件的位置,在编译的时候就无法进行 include 的链接库文件。

3.11 给工程文件添加 opencv 相关路径

codeblocks 左侧的 Projects 下在工程 opencv_test 上右键选择 Build options
首先添加 opencv 库文件:
Linker settings 下,点击 Add ,然后将 E:/OpenCV-2.2.0-build/lib 文件夹下的库文件全部添加。

 然后添加 opencv 的相关搜索路径,在 Search directories

首先是 include 路径的添加,选中 Compiler 然后点击 Add E:/OpenCV-2.2.0-build/include 添加进去。

 

然后是 lib 路径的添加,选中 Linker ,然后点击 Add E:/OpenCV-2.2.0-build/lib 添加进去。

 

最后还要将 opencv bin 目录添加到系统的环境变量中去

 

方法:
开始 -> 计算机 -> 右键 -> 属性 -> 高级系统设置 -> 环境变量
Path 中添加如下 E:/OpenCV-2.2.0-build/bin
( 注意同前一个路径之间要使用英文的分号 隔开 )
此时 opencv 的相关配置就完成了。

3.12 编译工程文件

点击 Build and run 按钮 ,进行编译。
注:如果不添加环境变量,也可以在 CMake 中配置的时候选中特殊的本地编译器,然后选
择刚刚 codeblocks 安装目录中的相应 MinGW 编译器。
C 编译器 :C:\Program Files (x86)\CodeBlocks\MinGW\bin\gcc.exe
C++ 编译器 : C:\Program Files (x86)\CodeBlocks\MinGW\bin\g++.exe

 


 🌟全文共  8911 个字,码字总结不易,老铁们来个三连:点赞、关注、评论🌟

🌟作者:左手の明天🌟

🌟原创不易,转载请联系作者并注明出处🌟

 

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

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

相关文章

Hadoop集群搭建详细步骤

目录 一、模板虚拟机环境准备 1.新建一台虚拟机hadoop100&#xff0c;并且配置好网络 3.安装 epel-release 4.其他工具 5. 配置普通用户具有root权限&#xff0c;方便后期加sudo执行root权限的命令 6.删除/opt/目录下的所有文件 7.在/opt/目录下创建文件夹&#xff0c;并…

RocketMQ底层源码解析——事务消息的实现

1. 简介 RocketMQ自身实现了事务消息&#xff0c;可以通过这个机制来实现一些对数据一致性有强需求的场景&#xff0c;保证上下游数据的一致性。 以电商交易场景为例&#xff0c;用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多个子系统…

基于javaee的电影碟片租赁管理系统的设计

技术&#xff1a;Java、JSP、框架等摘要&#xff1a;随着信息技术在管理中的广泛应用&#xff0c;管理信息系统(MIS)的实施在技术上逐渐成熟。为了适应时代的发展&#xff0c;降低管理成本&#xff0c;提高工作效率&#xff0c;企业需要加强对内部资源(人、钱、物)的有效管理&a…

Android测试包安装方式汇总

背景&#xff1a;作为一名测试&#xff0c;尤其是移动端测试&#xff0c;掌握app的安装方式是必备的基本技能&#xff0c;因此将Android测试包不同格式不同方式的安装方式进行一个总结分享​&#xff0c;仅供大家学习参考。 一、设备调试准备 1、设备打开开发者模式&#xff…

医学生考研考博太卷,一篇文章轻松助力上岸(一)

考研考博太卷了&#xff0c;卷不过&#xff0c;想没想过本科发一篇文章呢&#xff1f; 330分考研人淘汰390分考研人这个故事&#xff0c;大家应该都知道吧。 本专栏带你六个月内&#xff0c;搞定一篇文章&#xff0c;本科生发文章也很容易。 在卷考研的同时&#xff0c;再卷…

应用场景一:西门子PLC通过桥接器连接MQTT服务器

应用场景描述&#xff1a; 云平台、MES等数据采集、设备管理系统&#xff0c;需要通过MQTT的方式&#xff0c;上传和下发数据&#xff0c;MQTT服务器可以获取PLC的实时状态数据&#xff0c;也可以下发控制指令。桥接器提供4G、WIFI和有线三种连接方式。 网络拓扑&#xff1a;…

GRBL源码简单分析

结构体说明 GRBL里面的速度规划是带运动段前瞻的&#xff0c;所以有规划运动段数据和微小运动段的区分 这里的“规划运动段”对应的数据结构是plan_block_t&#xff0c;前瞻和加减速会使用到&#xff0c;也就是通过解析G代码后出来的直接直线数据或是圆弧插补出来的拟合直线数据…

【链式二叉树】数据结构链式二叉树的(万字详解)

前言&#xff1a; 在上一篇博客中&#xff0c;我们已经详解学习了堆的基本知识&#xff0c;今天带大家进入的是二叉树的另外一种存储方式----“链式二叉树”的学习&#xff0c;主要用到的就是“递归思想”&#xff01;&#xff01; 本文目录1.链式二叉树的实现1.1前置说明1.2结…

【蓝桥杯单片机】Keil5中怎么添加STC头文件;从烧录软件中添加显示添加成功后新建工程时依旧找不到

蓝桥杯单片机的芯片型号&#xff1a;IAP15F2K61S2 添加头文件&#xff1a;STC15F2K60S2.H 【1】如何通过烧录软件添加STC头文件&#xff1a; 从ATC-ISP的Keil仿真设置中添加&#xff08;同时自动下载仿真驱动&#xff09;仔细阅读添加说明 KEIL5添加STC芯片库_Initdev的博客-…

UVa The Morning after Halloween 万圣节后的早晨 双向BFS

题目链接&#xff1a;The Morning after Halloween 题目描述&#xff1a; 给定一个二维矩阵&#xff0c;图中有障碍物和字母&#xff0c;你需要把小写字母移动到对应的大写字母位置&#xff0c;不同的小写字母可以同时移动&#xff08;上下左右四个方向或者保持不动 &#xff0…

概论_第8章_假设检验的基本步骤__假设检验的类型

一. 假设检验的基本步骤如下&#xff1a;第1步 根据实际问题提出原假设 及备择假设 , 要求 与 有且仅有一个为真&#xff1b;第2步 选取适当的检验统计量&#xff0c; 并在原假设 成立的条件下确定该检验统计量的分布&#xff1b;第3步 按问题的具体要求&#xff0c; 选取适当…

【java】OpenFeign源码解析学习

本文主要针对 spring-cloud-starter-openfeign 的 2.2.3.RELEASE 版本进行源码的解析。 OpenFeign是什么&#xff1f; 作为Spring Cloud的子项目之一&#xff0c;Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式&#xff0c;为微服务架构下服务之间的调用提…

SQL Serve 日志体系结构

SQL Server 事务日志记录着 undo 及 redo 日志&#xff0c;为了保证数据库在崩溃后恢复&#xff0c;或者在正常数据库操作期间进行回滚&#xff0c;保证数据库事务完整性和持久化。如果没有事务日志记录&#xff0c;数据库在事务上将不一致&#xff0c;并且在数据库崩溃后可能导…

ThinkPHP5酒店预订管理系统

有需要请私信或看评论链接哦 可远程调试 ThinkPHP5酒店预订管理系统一 介绍 此酒店预订管理系统基于ThinkPHP5框架开发&#xff0c;数据库mysql&#xff0c;采用了ueditor富文本编辑器。系统角色分为用户&#xff0c;员工和管理员。用户可注册登录并预订酒店和评论等&#xff…

SpringCloud AlibabaSeata1.5.2的安装

目录 一、分布式问题 二、Seate简介 &#xff08;一&#xff09;官网 &#xff08;二&#xff09;Seate分布式事务的过程 &#xff08;三&#xff09; 分布式事务处理过程 &#xff08;四&#xff09;下载地址 三、Seata-Server安装 &#xff08;一&#xff09;官网 …

《Spring源码深度分析》第8章 数据库连接JDBC

目录标题前言一、数据库连接方式1.JDBC连接数据库2.Spring Jdbc连接数据库(JdbcTemplate)二、JdbcTemplate源码分析1.update/save功能的实现源码分析入口(关键)基础方法execute1.获取数据库连接池2.应用用户设定的输入参数3. 调用回调函数处理4. 资源释放Update中的回调函数2.q…

TreeSet 与 TreeMap And HashSet 与 HashMap

目录 Map TreeMap put()方法 : get()方法 : Set> entrySet() (重) : foreach遍历 : Set 哈希表 哈希冲突 : 冲突避免 : 冲突解决 ---- > 比散列(开放地址法) : 开散列 (链地址法 . 开链法) 简介 : 在Java中 , TreeSet 与 TreeMap 利用搜索树实现 Ma…

【项目精选】javaEE健康管理系统(论文+开题报告+答辩PPT+源代码+数据库+讲解视频)

点击下载源码 javaEE健康管理系统主要功能包括&#xff1a;教师登录退出、教师饮食管理、教师健康日志、体检管理等等。本系统结构如下&#xff1a; &#xff08;1&#xff09;用户模块&#xff1a; 实现登录功能 实现用户登录的退出 实现用户注册 &#xff08;2&#xff09;教…

运筹系列78:cbc使用介绍

1. 上手 1.1 快速使用 首先是简单的调用测试&#xff0c;在mac上首先安装clp的库&#xff1a;brew install coin-or-tools/coinor/cbc&#xff0c;然后新建项目进行调用&#xff0c;各项配置如下&#xff0c;注意要添加的library和directory比较多&#xff1a; 1.2 命令行方…

锁机制面试题

你是怎么理解乐观锁和悲观锁的&#xff0c;具体怎么实现呢&#xff1f; 悲观锁认为多个线程访问同一个共享变量冲突的概率较大 , 在每次访问共享变量之前都去真正加锁. 乐观锁认为多个线程访问同一个共享变量冲突的概率不大.,并不会真的加锁, 而是直接尝试访问数据 . 在访问的…