opencv基础-印度小哥

news2024/11/14 18:00:26

基础课程

第一章-读取图片、视频和摄像头

	Chapter 1 – Read Images Videos and Webcams

图片放在程序所在文件夹下的Resources/test.png在这里插入图片描述

1.1 opencv读取一张图片并显示:

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
/  Images  //
void main() {
    string path = "Resources/test.png";
    Mat img = imread(path);
    imshow("Image", img);
    waitKey(0);
}

运行后的效果
在这里插入图片描述

1.2 opencv读取一段视频并显示:

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Video  //
void main() {
	string path = "Resources/test_video.mp4";
	VideoCapture cap(path);
	Mat img;
	while (true) { //循环读取视频的帧
		cap.read(img);
		imshow("Image", img);
		waitKey(2);//每2ms读取一张图
	}
}

运行后的效果
在这里插入图片描述

1.3 opencv读取摄像头视频并显示:

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Video  //
void main() {
	VideoCapture cap(0); //笔记本自带的摄像头是0,外接的USB摄像头是1、2
	Mat img;
	while (true) {
		cap.read(img);
		imshow("image", img);
		waitKey(1);
			}
	}
}

运行后的效果
在这里插入图片描述
注意:由于一个程序只能有一个主函数main(),所有这里我们可以先将chapter1.cpp从source files exclude(不是remove删除,而是取消程序对这个程序的读取)
在这里插入图片描述
操作过程:
在这里插入图片描述
后面如果想把chapter1.cpp程序加载回来的操作:
请添加图片描述

第二章-基本功能

	Chapter 2 – Basic Functions

2.1 将图片转为灰度图

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

///  Gray //
void main() {
	string path = "Resources/test.png";//读取图片
	Mat img = imread(path);
	Mat imgGray;
	cvtColor(img,imgGray,COLOR_BGR2GRAY); //将BGR彩色图像转为灰色图像
	imshow("Image", img);
	imshow("Image Gray", imgGray);
	waitKey(0);
}

在这里插入图片描述

2.2 将图片变得模糊

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Blur //
void main() {
	string path = "Resources/test.png";//读取图片
	Mat img = imread(path);
	Mat imgGray,imgBlur;
	cvtColor(img,imgGray,COLOR_BGR2GRAY); //将BGR彩色图像转为灰色图像
	GaussianBlur(img, imgBlur,Size(7,7),5,0);//高斯法将图片进行模糊化处理
	imshow("Image", img);
	imshow("Image Gray", imgGray);
	imshow("Image imgBlur", imgBlur);//别写成	
	 //imshow("Image Gray", imgBlur);否则只显示一张图!
	waitKey(0);
}

在这里插入图片描述

2.3 将图片进行边缘轮廓检测

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Canny //
void main() {
	string path = "Resources/test.png";//读取图片
	Mat img = imread(path);
	Mat imgGray,imgBlur, imgCanny;
	cvtColor(img,imgGray,COLOR_BGR2GRAY); //将BGR彩色图像转为灰色图像
	GaussianBlur(img, imgBlur,Size(3,3),3,0);//高斯法将图片进行模糊化处理
	Canny(imgBlur,imgCanny,25,75);
	imshow("Image", img);
	imshow("Image Gray", imgGray);
	imshow("Image imgBlur", imgBlur);
	imshow("Image imgCanny", imgCanny);
	waitKey(0);
}

在这里插入图片描述

2.4 将已经进行边缘检测的图片进行腐蚀或膨胀

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Dilation & Erode //
void main() {
	string path = "Resources/test.png";//读取图片
	Mat img = imread(path);
	Mat imgGray,imgBlur, imgCanny,imgDil,imgErode;
	cvtColor(img,imgGray,COLOR_BGR2GRAY); //将BGR彩色图像转为灰色图像
	GaussianBlur(img, imgBlur,Size(3,3),3,0);//高斯法将图片进行模糊化处理
	Canny(imgBlur,imgCanny,25,75);
	Mat kernel = getStructuringElement(MORPH_RECT,Size(3,3)); //用于将图像中的线条腐蚀(变细)或膨胀(变粗)
	dilate(imgCanny,imgDil,kernel);
	erode(imgDil, imgErode, kernel);
	imshow("Image", img);
	imshow("Image Gray", imgGray);
	imshow("Image Blur", imgBlur);
	imshow("Image Canny", imgCanny);
	imshow("Image Dilation", imgDil);
	imshow("Image Erode", imgErode);
	waitKey(0);
}

在这里插入图片描述

第三章-调整大小和裁剪

	Chapter 3 – Resize and Crop

这里再演示一下新建chapter3.cpp程序,将chapter2.cpp程序 exclude。
在这里插入图片描述

3.1 将图片调整大小、裁剪

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Resize and Crop //

void main() {
	string path = "Resources/test.png";
	Mat img = imread(path);
	Mat imgResize, imgCrop;
	//cout << img.size() << endl; //打印出图片的大小  768X559
	resize(img, imgResize, Size(), 0.5, 0.5);//缩放
	Rect roi(200, 100, 300, 300); //一个矩形的位置和大小
	imgCrop = img(roi);//截取出刚刚矩形内部的部分
	imshow("Image", img);
	imshow("Image Resize", imgResize);
	imshow("Image Crop", imgCrop);
	waitKey(0);
}

在这里插入图片描述

第四章-绘制形状和文本

	Chapter 4 – Draw Shapes and Text
	这里再演示一下新建chapter4.cpp程序,将chapter3.cpp程序 exclude。![在这里插入图片描述](https://img-blog.csdnimg.cn/279f7c73c28f43b088164a8d05c78307.gif)

4.1 在图片中绘制形状和写入文字

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
//  Draw Shapes and Text //
void main() {
	// Blank Image 
	Mat img(512, 512, CV_8UC3, Scalar(255, 255, 255)); //新建一个白色的“画板”
	circle(img, Point(256, 256), 155, Scalar(0, 69, 255), FILLED);//画圆
	rectangle(img, Point(130, 226), Point(382, 286), Scalar(255, 255, 255), FILLED);//画矩形
	line(img, Point(130, 296), Point(382, 296), Scalar(255, 255, 255), 2);//画线条
	putText(img, "Murtaza's Workshop", Point(137, 262), FONT_HERSHEY_DUPLEX, 0.75, Scalar(0, 69, 255), 2);//写文本

	imshow("Image", img);
	waitKey(0);
}

在这里插入图片描述

第五章-将图像进行变形操作

	Chapter 5 – Warp Images

5.1 将图片转为灰度图

右键图片,选择其他方式打开-选择画图,然后可以获得图片中不同物体在图片中的坐标(截的动图有点绿…)
在这里插入图片描述
左上528,142
左下404,391
右上169,192
右下672.456

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Warp Images  //
void main() {
	string path = "Resources/cards.jpg";
	Mat img = imread(path);
	Mat matrix, imgWarp;
	float w = 250, h = 350; //之后要新创建的图片的大小
	Point2f src[4] = { {529,142},{771,190},{405,395},{674,457} }; //找到图片中要提取目标的四个点
	Point2f dst[4] = { {0.0f,0.0f},{w,0.0f},{0.0f,h},{w,h} };//将原图片中的目标的四个点映射到新创建的一个图片的四个点上
	matrix = getPerspectiveTransform(src, dst);//从四对对应的点计算透视变换.函数计算的是 3*3的满足以下关系的透视转换矩阵:
	warpPerspective(img, imgWarp, matrix, Point(w, h));//通过透视矩阵把透视变换应用到一个图像上。(就是把原图片中的目标提取出来放到新建的图片中)
	for (int i = 0; i < 4; i++)
	{
		circle(img, src[i], 10, Scalar(0, 0, 255), FILLED);//将原图片上要提取目标的四个点圈起来
	}
	imshow("Image", img);
	imshow("Image Warp", imgWarp);
	waitKey(0);

}

实验效果:
在这里插入图片描述

第六章-颜色检测

	Chapter 6 – Color Detection

6.1 颜色检测

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>
using namespace cv;
using namespace std;
///  Color Detection  //
void main() {
	string path = "Resources/lambo.png";//可以把图片换成shapes.png用于颜色区分检测
	Mat img = imread(path);
	Mat imgHSV, mask;
	int hmin = 0, smin = 110, vmin = 153; //为了寻找到检测颜色的区间
	int hmax = 19, smax = 240, vmax = 255;
	cvtColor(img, imgHSV, COLOR_BGR2HSV);//将图片转化为HSV格式,便于检测颜色
	namedWindow("Trackbars", (640, 200));//创建一个名为"Trackbars"的窗口
	createTrackbar("Hue Min", "Trackbars", &hmin, 179);//在"Trackbars"窗口中创建一个名为"Hue Min"的拖条,其值变化区间为(hmin, 179)(hmin最初为0);
	createTrackbar("Hue Max", "Trackbars", &hmax, 179);
	createTrackbar("Sat Min", "Trackbars", &smin, 255);
	createTrackbar("Sat Max", "Trackbars", &smax, 255);
	createTrackbar("Val Min", "Trackbars", &vmin, 255);
	createTrackbar("Val Max", "Trackbars", &vmax, 255);
	while (true) {
		Scalar lower(hmin, smin, vmin);
		Scalar upper(hmax, smax, vmax);
		inRange(imgHSV, lower, upper, mask);//基于imgHSV进行一定范围的颜色检测,最后生成Image Mask
		imshow("Image", img);
		imshow("Image HSV", imgHSV);
		imshow("Image Mask", mask);
		waitKey(1);
	}
}

在这里插入图片描述

第七章-形状/轮廓检测

	Chapter 7 – Shape/Contour Detection

7.1 形状/轮廓检测

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;

///  Color Detection  //

void getContours(Mat imgDil, Mat img) {

	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;

	findContours(imgDil, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	//drawContours(img, contours, -1, Scalar(255, 0, 255), 2);

	vector<vector<Point>> conPoly(contours.size());
	vector<Rect> boundRect(contours.size());

	for (int i = 0; i < contours.size(); i++) //最核心的地方其实是检测出图形的边缘,然后根据边缘角度变化(例如三角形有三条边),矩形有四条边等对检测到的图形进行分类
	{
		int area = contourArea(contours[i]);
		cout << area << endl;
		string objectType;

		if (area > 1000)
		{
			float peri = arcLength(contours[i], true);
			approxPolyDP(contours[i], conPoly[i], 0.02 * peri, true);
			cout << conPoly[i].size() << endl;
			boundRect[i] = boundingRect(conPoly[i]);

			int objCor = (int)conPoly[i].size();

			if (objCor == 3) { objectType = "Tri"; }
			else if (objCor == 4)
			{
				float aspRatio = (float)boundRect[i].width / (float)boundRect[i].height;
				cout << aspRatio << endl;
				if (aspRatio > 0.95 && aspRatio < 1.05) { objectType = "Square"; }
				else { objectType = "Rect"; }
			}
			else if (objCor > 4) { objectType = "Circle"; }

			drawContours(img, conPoly, i, Scalar(255, 0, 255), 2);
			rectangle(img, boundRect[i].tl(), boundRect[i].br(), Scalar(0, 255, 0), 5);
			putText(img, objectType, { boundRect[i].x,boundRect[i].y - 5 }, FONT_HERSHEY_PLAIN, 1, Scalar(0, 69, 255), 2);
		}
	}
}


void main() {

	string path = "Resources/shapes.png";
	Mat img = imread(path);
	Mat imgGray, imgBlur, imgCanny, imgDil, imgErode;

	// Preprocessing
	cvtColor(img, imgGray, COLOR_BGR2GRAY);
	GaussianBlur(imgGray, imgBlur, Size(3, 3), 3, 0);
	Canny(imgBlur, imgCanny, 25, 75);
	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
	dilate(imgCanny, imgDil, kernel);

	getContours(imgDil, img);

	imshow("Image", img);
	//imshow("Image Gray", imgGray);
	//imshow("Image Blur", imgBlur);
	//imshow("Image Canny", imgCanny);
	//imshow("Image Dil", imgDil);

	waitKey(0);

}

过程演示(不知道为啥拖动窗口就出现绿色了…)在这里插入图片描述

第八章-人脸识别

	Chapter 8 – Face Detection
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/objdetect.hpp>//用于检测的包
#include <iostream>

using namespace cv;
using namespace std;


///  Images  //

void main() {

	string path = "Resources/test.png";
	Mat img = imread(path);

	CascadeClassifier faceCascade;
	faceCascade.load("Resources/haarcascade_frontalface_default.xml");//这个是已经训练过的分类器的包

	if (faceCascade.empty()) { cout << "XML file not loaded" << endl; }

	vector<Rect> faces;//用于圈脸的矩形
	faceCascade.detectMultiScale(img, faces, 1.1, 10);

	for (int i = 0; i < faces.size(); i++)
	{
		rectangle(img, faces[i].tl(), faces[i].br(), Scalar(255, 0, 255), 3);
	}

	imshow("Image", img);
	waitKey(0);
}

在这里插入图片描述

小项目

1. 虚拟画家

Project 1 – Virtual Paint

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <iostream>

using namespace cv;
using namespace std;


/  Project 1 - Virtual Painter //

Mat img;
VideoCapture cap(0);
vector<vector<int>> newPoints;  // to store all points

/  COLOR VALUES 
						   // hmin, smin, vmin hmax, smax, vmax
vector<vector<int>> myColors{ {124,48,117,143,170,255}, // Purple
								{68,72,156,102,126,255} };// Green
vector<Scalar> myColorValues{ {255,0,255},		// Purple
								{0,255,0} };// Green 	


Point getContours(Mat image) {


	vector<vector<Point>> contours;
	vector<Vec4i> hierarchy;

	findContours(image, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	//drawContours(img, contours, -1, Scalar(255, 0, 255), 2);
	vector<vector<Point>> conPoly(contours.size());
	vector<Rect> boundRect(contours.size());

	Point myPoint(0, 0);

	for (int i = 0; i < contours.size(); i++)
	{
		int area = contourArea(contours[i]);
		cout << area << endl;

		string objectType;

		if (area > 1000)
		{
			float peri = arcLength(contours[i], true);
			approxPolyDP(contours[i], conPoly[i], 0.02 * peri, true);

			cout << conPoly[i].size() << endl;
			boundRect[i] = boundingRect(conPoly[i]);
			myPoint.x = boundRect[i].x + boundRect[i].width / 2;
			myPoint.y = boundRect[i].y;

			//drawContours(img, conPoly, i, Scalar(255, 0, 255), 2);
			//rectangle(img, boundRect[i].tl(), boundRect[i].br(), Scalar(0, 255, 0), 5);
		}
	}
	return myPoint;
}


vector<vector<int>> findColor(Mat img)
{
	Mat imgHSV;
	cvtColor(img, imgHSV, COLOR_BGR2HSV);

	for (int i = 0; i < myColors.size(); i++)
	{
		Scalar lower(myColors[i][0], myColors[i][1], myColors[i][2]);
		Scalar upper(myColors[i][3], myColors[i][4], myColors[i][5]);
		Mat mask;
		inRange(imgHSV, lower, upper, mask);
		//imshow(to_string(i), mask);
		Point myPoint = getContours(mask);
		if (myPoint.x != 0 ) {
			newPoints.push_back({ myPoint.x,myPoint.y,i });
		}
	}
	return newPoints;
}

void drawOnCanvas(vector<vector<int>> newPoints, vector<Scalar> myColorValues)
{

	for (int i = 0; i < newPoints.size(); i++)
	{
		circle(img, Point(newPoints[i][0],newPoints[i][1]), 10, myColorValues[newPoints[i][2]], FILLED);
	}
}


void main() {

	while (true) {

		cap.read(img);
		newPoints = findColor(img);
		drawOnCanvas(newPoints, myColorValues);

		imshow("Image", img);
		waitKey(1);
	}
}

2. 文档扫描仪

Project 2 – Document Scanner

3. 虚拟画家

Project 1 – Virtual Paint

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

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

相关文章

Jmeter命令执行生成HTML格式报告详解

1、Dashboard&#xff08;概览仪表盘&#xff09; ①、Test and Report informations Test and Report informations&#xff1a;测试和报告信息: 测试结果保存文件/测试开始时间/测试结束时间/展示过滤器。 ②、APDEX (应用性能指标) APDEX(Application Performance Index)&am…

安装pangolin问题解决|找不到makefile

前提&#xff1a; 使用的系统为ubuntu18.04版本 遇到的问题&#xff1a; 问题一&#xff1a; 按照如下命令安装时出现了错误 git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin mkdir build cd build cmake .. make -j4 sudo make install我用的cma…

vncserver远程管理kvm虚拟机

一、安装KVM 检查服务器是否支持虚拟化&#xff08;vmx为interl平台、svm是AMD平台&#xff09;&#xff1a; grep -E -o vmx|svm /proc/cpuinfo 安装KVM所需软件包&#xff1a; yum groupinstall kvm 或者&#xff1a; yum install kvm kmod-kvm qemu kvm-qemu-img virt…

数据链路层-点对点PPP(point-to-point protocal)

点对点协议ppp是目前使用最广泛的点对点数据链路层协议 用户通过连接运营商的isp&#xff0c;用的就是pppoe协议pppoe ppp over ethernet ppp协议为点对点数据链路层协议的数据报提供了一个标准方法 封装成帧链路控制协议LCP&#xff0c;主要用于建立&#xff0c;配置&#xf…

【面试题】JSON.stringify 和fast-json-stringify有什么区别

前言 相信大家对JSON.stringify并不陌生&#xff0c;通常在很多场景下都会用到这个API&#xff0c;最常见的就是HTTP请求中的数据传输&#xff0c; 因为HTTP 协议是一个文本协议&#xff0c;传输的格式都是字符串&#xff0c;但我们在代码中常常操作的是 JSON 格式的数据&…

Flink系列之Flink中Window原理及实践

title: Flink系列 一、Flink Window 概述 官网链接&#xff1a; https://nightlies.apache.org/flink/flink-docs-release-1.14/docs/dev/datastream/operators/windows/ 摘取一段话&#xff1a; Windows are at the heart of processing infinite streams. Windows split …

基于蒙特卡洛法的规模化电动车有序充放电及负荷预测(PythonMatlab实现)

&#x1f4a5;&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️❤️&#x1f4a5;&#x1f4a5;&#x1f4a5; &#x1f389;作者研究&#xff1a;&#x1f3c5;&#x1f3c5;&#x1f3c5;主要研究方向是电力系统和智能算法、机器学…

刷爆力扣之三个数的最大乘积

刷爆力扣之三个数的最大乘积 HELLO&#xff0c;各位看官大大好&#xff0c;我是阿呆 &#x1f648;&#x1f648;&#x1f648; 今天阿呆继续记录下力扣刷题过程&#xff0c;收录在专栏算法中 &#x1f61c;&#x1f61c;&#x1f61c; 该专栏按照不同类别标签进行刷题&#x…

运维实战100:CDH5.16.2升级至CDH6.3.2

本期来分享一个cdh企业运维实战案例 背景 为适应公司业务发展需求&#xff0c;提高相关大数据组件版本&#xff0c;解决开发中的一些技术问题和代码优化&#xff0c;需要将现有集群CDH版本由5.x版本升级为6.3.x版本&#xff0c;也是为了适配如Flink、Doris等一些计算引擎。由…

ArcGIS Pro从0到1入门实战教程 书籍淘宝线上销售,免费下载数据和视频

网址&#xff1a;https://m.tb.cn/h.USz9rbD?tkcu0Vd2cABAV 购书后五星好评&#xff0c;加下面微信&#xff0c;截图发给我们&#xff1a;送Python电子书&#xff0c;下面是我们的微信 关注翎树文化&#xff0c;获得更多好书信息 翎树文化 翎树文化致力于图书出版|科技文化|视…

leetcode:1203. 项目管理【双topo:组间topo + 组内topo】

目录题目截图题目分析ac code总结题目截图 题目分析 没有第一个条件&#xff0c;就是简单topo排序有了第一个条件&#xff0c;每个小组都需要完全隔开&#xff0c;因此不同小组间也需要一个topo排step1&#xff1a;对于group为-1的自成一组step2&#xff1a;建图&#xff0c;组…

什么是信息摘要?

信息摘要就是原数据通过某个算法生成的一个固定长度的单向Hash散列值&#xff08;PS:常用来生成信息摘要的算法有MD5与SHA算法)。固定长度得意思就是不论原文内容多大&#xff0c;其生成的信息摘要都是固定长度的。单向的意思是过程不可逆&#xff0c;即只能通过原始数据生成Ha…

Mybatis用到的设计模式

虽然我们都知道有26个设计模式&#xff0c;但是大多停留在概念层面&#xff0c;真实开发中很少遇到&#xff0c;Mybatis源码中使用了大量的设计模式&#xff0c;阅读源码并观察设计模式在其中的应用&#xff0c;能够更深入的理解设计模式。 Mybatis至少遇到了以下的设计模式的…

提高组比赛分析(1)

停更n个月&#xff0c;我又来了&#xff01; 今天打了场模拟赛&#xff0c;差点就AK IOI了 废话不多说 正片开始 题目一&#xff1a;#1751. 第 T 个数 Description 给定一个 n(0<n≤10000) 个整数构成的序列&#xff0c;每个数 a[i] 都是小于 210^9 的非负整数 &#x…

[附源码]Python计算机毕业设计SSM家居购物系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

yalmip和cplex安装步骤(Matlab)

&#x1f4cb;&#x1f4cb;&#x1f4cb;本文目录如下&#xff1a;⛳️⛳️⛳️ ​ 目录 1 yalmip和cplex的安装 1.1 yalmip安装 1.2 cplex安装过程 1 yalmip和cplex的安装 链接&#xff1a;https://pan.baidu.com/s/13One78qt1uSz92zNC6Xvlg 提取码&#xff1a;bicr --来…

websocket实践与浅入浅出

websocket实践与浅入浅出websocket与http的区别&#xff1f;websocket的应用场景&#xff1f;websocket通信方式websocket协议结构分布式下IM多端同步的实现方案TIP1. 心跳2. 多端同步3. wss4. otherwebsocket与http的区别&#xff1f; Http&#xff1a;请求与响应的模式&…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园招聘信息管理系统64f99

这个选题的话其实有很多的&#xff0c;就看你自己能接受怎么样的&#xff0c;比如可以做网站类、系统类、小程序类、安卓app、大数据类等等&#xff0c;这个也要看你个人能力和技术问题&#xff0c;如果技术小白或者有一点点基础的话建议选择网站类和系统类的&#xff0c;如果有…

关于NDK

libc_shared.so 在目前ndk的最新版本25.1.8937393中有4个libc_shared.so&#xff0c;用Everything搜索结果如下&#xff1a; 可以看到&#xff0c;大小最小的有4M多。 对于libc库&#xff0c;官方介绍在此&#xff0c;摘取一些片段如下&#xff1a; LLVM 的 libc 是 C 标准库…

[附源码]Python计算机毕业设计Django养生药膳推荐系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…