引入opencv依赖
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.9.0-0</version>
</dependency>
依赖查询:mvnrepository.com/artifact/or…
mac安装opencv
brew install opencv
代码中使用
public class OpencvUtils {
static {
nu.pattern.OpenCV.loadLocally();
}
public static void main(String[] args) {
// TODO:这里直接使用opencv相关功能即可
}
}
通过图片的cnd链接,得到Mat类型
/**
* 通过图片链接得到bufferedImage
* @param imageUrl 图片cdn链接
* @return BufferedImage
*/
private static BufferedImage getBufferedByUrl(String imageUrl) {
Request request = new Request.Builder()
.header("keep-alive", "true")
.url(imageUrl)
.get()
.build();
// client是okhttp,自己封装即可
try (Response response = client.newCall(request).execute()) {
if (!response.isSuccessful()) {
throw new RuntimeException("请求失败,HTTP 状态码: " + response.code());
}
try (InputStream inputStream = response.body().byteStream()) {
return ImageIO.read(inputStream);
} catch (IOException e) {
log.error("获取图片流失败", e);
throw new RuntimeException(e);
}
} catch (IOException e) {
log.error("下载图片失败", e);
throw new RuntimeException(e);
}
}
/**
* bufferedImage转Mat
* @param bufferedImage 图片
* @return Mat
*/
private static Mat bufferedImageToMat(BufferedImage bufferedImage) {
int type = bufferedImage.getType();
if (type != BufferedImage.TYPE_3BYTE_BGR) {
BufferedImage convertedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(),
BufferedImage.TYPE_3BYTE_BGR);
convertedImage.getGraphics().drawImage(bufferedImage, 0, 0, null);
bufferedImage = convertedImage;
}
byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData();
Mat mat = new Mat(bufferedImage.getHeight(), bufferedImage.getWidth(), CvType.CV_8UC3);
mat.put(0, 0, pixels);
return mat;
}