OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库,提供了丰富的功能和工具,用于处理图像和视频数据。其主要功能包括但不限于以下几个方面:
对于小编来说用的最多的功能为区域找图,结合Robot类的键盘鼠标控制,可以实现自动化测试,游戏辅助,比如结合人脸识别+鼠标移动就可以实现射击类游戏的自动瞄准(俺只是好奇,俺没有用,别骂俺是挂壁),再比如某些养成游戏,可以做个小机器人完成每日任务,养他1000个号,养肥了去卖钱(同一个ip可能会封号,小编也没遇到啥好的解决办法,有好方案的可以留言)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.lxw</groupId>
<artifactId>robot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>robot-study</name>
<description>robot-study</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.8.1-0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import javax.annotation.PostConstruct;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Value("${opencv.path}")
private String opencvPath;
@PostConstruct
public void init() {
// 加载opencv库
System.load(opencvPath);
}
}
也可以在配置类中加载,只要保证能在使用前加载进来就行
由于opencv动态库不能跨平台使用,所以要区分环境,windows下是opencv_java4.8.0.dll这种格式,linux下是libopencv_java480.so这种格式,默认本地使用dev环境,动态库文件见附件
spring.profiles.active=dev
opencv.path=E:\\code\\robot-study\\robot-study-service\\src\\main\\resources\\lib\\opencv\\opencv_java481.dll
opencv.image.path=C:\\Users\\Administrator\\Desktop\\opencv\\
opencv.path=/root/opencv/libopencv_java480.so
# 这里直接保存到了nginx下,通过路径可以直接访问
opencv.image.path=/usr/local/nginx/opencv/
代码示例
@Value("${opencv.image.path}")
private String path;
@RequestMapping("/sketch")
public Object sketch(MultipartFile file) throws Exception {
byte[] bytes = file.getBytes();
// 使用前确保opencv库已加载,否则会报错
MatOfByte matOfByte = new MatOfByte(bytes);
Mat img = Imgcodecs.imdecode(matOfByte, Imgcodecs.IMREAD_COLOR);
// 检查图像是否成功加载
if (img.empty()) {
throw new RuntimeException("读取图片失败");
}
// 灰度图片
Mat gray = new Mat();
Imgproc.cvtColor(img, gray, Imgproc.COLOR_BGR2GRAY);
// 高斯去噪
Mat blurredImage = new Mat();
Imgproc.GaussianBlur(gray, blurredImage, new Size(21, 21), 0);
// 融合原始灰度图像和模糊图像
Mat sketchImage = new Mat();
Core.divide(gray, blurredImage, sketchImage, 256.0);
String filename = path + file.getOriginalFilename();
// 保存图片
Imgcodecs.imwrite(filename, sketchImage);
return filename;
}
http://150.158.33.191/api/open/write