采用OpenCv——多边形等距收缩实现

本文介绍了如何使用OpenCV库在Java中实现多边形的等距收缩功能,详细阐述了代码实现过程及注意事项,包括坐标点处理、矩阵平移和初始化、收缩算法的思想,并分享了在开发过程中遇到的坑和解决方法。
摘要由CSDN通过智能技术生成
摘要

最近由于公司业务需求,需要实现对一个多边形进行等距收缩一定距离,其实现效果图大致如下:
这里写图片描述
虽然单点距离貌似收缩情况不太正确,不过看起来还是蛮顺眼的。反正领导看到一眼就说他要这样的,好嘞,小二马上给你搞。由于OpenCv针对于图形处理具有较多优秀的算法,并且当时找到一篇收缩算法正是用这个玩意做的,于是参考该作者的C++代码,地址:https://blog.csdn.net/dcrmg/article/details/52517991,实现了一版Java对应的版本。由于OpenCv是C++函数库,并且对于Java的Api并没有太多的中文资料,所以本就菜鸟的作者也是花费不少时间才搞出来,所以在介绍收缩之前需安装OpenCv相关环境,可以参考本人博客:安装OpenCv环境

注意事项:其实安装OpenCv不管是在windows、MacOs还是Linux环境下都并不难,只需要两部分即可:1、OpenCv本身的C++函数库。2、OpenCv对于Java支持的Jar。

七夕大家都回家玩游戏陪女朋友,我特码还在公司看代码,还写个鸡毛博客,眼泪不争气地流了下来,算了没心情了,待更吧……


续更……
哈哈哈,经过几天的恢复,我胡汉三又回来啦,先把收缩相关代码贴出来给大伙尝尝鲜。

package com.lanxuewei.utils.opencv;

import static org.opencv.core.CvType.CV_32FC1;
import static org.opencv.core.CvType.CV_8UC1;
import static org.opencv.imgproc.Imgproc.*;

import java.awt.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.lanxuewei.utils.json.AiResultJsonModel;
import org.opencv.core.*;
import org.opencv.core.Point;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


/**
 * @author lanxuewei Create in 2018/7/30 17:29
 * Description: 多边形等距收缩(需使用openCv,所以需要在支持openCv环境下使用) 
 */
public class PolygonScaleHelper {
   

    static {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);               // 加载opencv的库
    }

    private static final Logger logger = LoggerFactory.getLogger(PolygonScaleHelper.class);


    /** x、y坐标最大最小值常量字符串 */
    private static final String XMax = "xMax";
    private static final String XMin = "xMin";
    private static final String YMax = "yMax";
    private static final String YMin = "yMin";

    /** List<Double>坐标中xy对应下标志 */
    private static final int X = 0;
    private static final int Y = 1;

    /** 平移时距离边框留白距离 */
    private static int PADDING = 10;

    /**
     * 更新多边形(收缩)
     *
     * @param points 多边形坐标集
     * @param scale 收缩比
     */
    public static List<List<Double>> updatePolygonByScale(List<List<Double>> points, float scale) {
        /**
         * 1.获取xy最大最小值
         * 2.平移坐标
         * 3.矩阵变换
         * 4.平移坐标
         */
        List<List<Double>> resultPoints = new ArrayList<>();
        if (points != null && points.size() > 0) {                  // 坐标不为空才进行处理
            List<MatOfPoint> matOfPoints = new ArrayList<>();       // 将List<Point>转化为List<
opencv——基于python语言实现》pdf 是一本介绍了使用Python语言实现OpenCV库的编程技术的电子书。 OpenCV 是一个广泛应用于计算机视觉领域的开源库,它提供了许多用于图像处理和计算机视觉的函数和算法。 该电子书首先介绍了OpenCV和Python的基本概念和背景知识,如图像处理的基本操作和图像编程的基本原理。它还详细介绍了OpenCV库中的各种图像处理算法和函数,并提供了许多示例代码和案例研究,以帮助读者理解和应用这些算法和函数。 该电子书还涵盖了如何使用Python与OpenCV进行人脸检测、目标跟踪、图像识别和图像分割等常见任务。它还介绍了如何利用OpenCV和Python进行视频处理和实时图像处理,并展示了如何与摄像头和外部设备进行交互。 这本书对于希望学习和应用OpenCV和Python进行图像处理和计算机视觉的人来说是非常有价值的。它详细讲解了OpenCV库中的各种函数和算法的使用方法,并提供了丰富的示例和案例研究。读者可以通过学习该书,深入了解OpenCV和Python的使用,并掌握图像处理和计算机视觉的基本原理和技术,从而能够应用于实际项目和应用中。 总之,《opencv——基于python语言实现》pdf 是一本适合初学者和有一定基础的人学习和应用OpenCV和Python进行图像处理和计算机视觉的电子书。通过阅读该书,读者可以全面了解OpenCV库的使用方法和基本原理,并掌握使用Python语言进行图像处理和计算机视觉任务的技术。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值