Dlib Opencv cv2.fitEllipse用于人眼轮廓椭圆拟合

dlib库的安装以及人脸特征点的识别分布分别在前两篇博文里面

Dlib Python 检测人脸特征点 Face Landmark Detection

Mac OSX下安装dlib (Python)

这篇主要涉及 cv2.ellipse 和 cv2.fitEllipse 的用法

import cv2
import dlib
import numpy as np

detector = dlib.get_frontal_face_detector()
landmark_predictor = dlib.shape_predictor('/Users/apple/Downloads/shape_predictor_68_face_landmarks.dat')

img = cv2.imread('/Users/apple/Downloads/3-1.jpg')
faces = detector(img,1)
left_eye = []
right_eye = []
if ( len(faces) > 0):
    for k,d in enumerate(faces):
        shape = landmark_predictor(img,d)
        for i in range(36,42):
            right_eye.append([shape.part(i).x,shape.part(i).y])
        for i in range(42,48):
            left_eye.append([shape.part(i).x,shape.part(i).y])





ellipse_left = cv2.fitEllipse(np.array(left_eye))
ellipse_right = cv2.fitEllipse(np.array(right_eye))
cv2.ellipse(img, ellipse_left, (0,255,0), 1)
cv2.ellipse(img, ellipse_right, (0,255,0), 1)



cv2.fitEllipse(points)

里面的points类型要求是numpy.array([[x,y],[x1,y1]...]) 并不是把所有点都包括在椭圆里面,而是拟合出一个椭圆尽量使得点都在圆上

cv2.ellipse(img, center, axes, angle, startAngle, endAngle, color[, thickness[, lineType[, shift]]]) 

其中每个参数的意义如下:

· img 图像

· center 中心坐标

· axes 椭圆的尺寸(长短轴)

· angle 旋转角度

· startAngle 起始角度

· endAngle 终止角度

· 后面参数都是跟线条有关的

ellipse_left

((275.1310119628906, 197.24081420898438),
 (13.491097450256348, 47.203433990478516),
 84.19256591796875)





这个时候返回的分别是椭圆的中心坐标,短轴长轴(也就是2b,2a),旋转角度.

center = ellipse_left[0]
size = ellipse_left[1]
angle = ellispe_left[2]



cv2.imshow('PIC',img)
cv2.waitKey(0)

937655-20170830223724155-1435267176.png

转载于:https://www.cnblogs.com/as3asddd/p/7455712.html

<think>好的,我现在需要解决用户在QT项目中遇到的Dlibopencv_aruco342.dll导致的LNK1107错误的问题。首先,我需要回忆一下LNK1107错误的常见原因和解决方法。 根据用户提供的引用[1],LNK1181错误是无法打开输入文件,而LNK1107通常与无法读取或损坏的DLL文件有关。用户提到的是opencv_aruco342.dll出现LNK1107错误,可能的情况包括文件路径错误、文件损坏或版本不匹配。 首先,我需要确认DLL文件是否存在且路径正确。用户可能在项目配置中指定了错误的库路径,或者DLL文件被移动或删除。建议用户检查QT项目的.pro文件,确保LIBS路径正确指向opencv_aruco342.dll的位置。同时,检查系统环境变量是否包含该DLL所在的目录,避免运行时找不到。 其次,文件损坏的可能性。用户可以从可靠的来源重新下载该DLL文件,或者使用引用[2]中提到的方法,使用DLL修复工具下载并替换文件。需要提醒用户确保下载的DLL版本与项目所需的版本一致,特别是opencv_aruco342中的342可能代表OpenCV的版本号,如3.4.2,因此版本匹配很重要。 另外,DlibOpenCV的兼容性也可能导致问题。用户应确认Dlib的版本是否与当前使用的OpenCV版本兼容。可能需要更新DlibOpenCV到兼容的版本。 还有可能是构建过程中的问题,比如在调试模式下错误地链接了发布版的DLL,或者反之。用户需要检查项目配置中的构建模式是否与DLL的构建模式匹配。 此外,检查是否有防病毒软件或权限问题阻止了QT访问该DLL文件。临时禁用防病毒软件或以管理员身份运行QT可能有助于排除这类问题。 最后,如果以上步骤无效,建议用户清理并重新构建项目,或者尝试创建一个新的QT项目来测试是否仍然出现相同的错误,以确定是否是项目配置的问题。 总结下来,解决方案的步骤可能包括:检查路径配置、重新获取DLL文件、确保版本兼容性、检查构建配置、处理权限或杀毒软件问题,以及重新构建项目。</think>### QT项目中Dlib opencv_aruco342.dll LNK1107错误解决方案 #### 错误分析 LNK1107错误表示编译器无法正确读取或加载动态链接库(DLL)文件,通常由以下原因导致: 1. **DLL文件路径错误**:编译器未找到指定文件[^1] 2. **文件损坏或版本不匹配**:DLL文件被破坏或与当前环境不兼容 3. **依赖项缺失**:DLL依赖的其他库未正确配置 4. **构建模式冲突**:调试模式(Debug)与发布模式(Release)的DLL混用 --- #### 分步解决方案 **1. 验证文件路径配置** - 打开QT项目的`.pro`文件,检查`LIBS`路径是否包含正确的DLL路径: ```qmake LIBS += -L"D:/opencv342/bin" -lopencv_aruco342 ``` - 确保路径中**无中文字符或空格**,使用绝对路径更可靠 - 在系统环境变量`PATH`中添加DLL所在目录(需重启QT生效) **2. 修复或替换DLL文件** - **重新下载文件**: - 通过OpenCV官网下载对应版本(如3.4.2)的预编译库 - 使用DLL修复工具(参考引用[2]方法)下载文件 - **验证文件完整性**: - 右键DLL文件→属性→数字签名,确认签名有效 - 用工具检查MD5哈希值(如`certutil -hashfile opencv_aruco342.dll MD5`) **3. 检查依赖关系** - 使用`Dependency Walker`工具分析`opencv_aruco342.dll`的依赖链 - 确保以下基础运行库已安装: - Visual C++ Redistributable(如VS2015的vc_redist.x64.exe) - .NET Framework 4.8+ **4. 统一构建模式** - 若使用**Debug模式**编译: - 需链接`opencv_aruco342d.dll`(带调试符号的版本) - 若使用**Release模式**: - 链接`opencv_aruco342.dll` **5. 清理并重建项目** - 执行`构建→清理所有项目` - 手动删除`build`目录 - 重新运行`qmake`并构建 --- #### 补充建议 - 若使用Dlib,需确保其CMake配置中正确指定了OpenCV路径: ```cmake set(OpenCV_DIR "D:/opencv342/build") find_package(OpenCV REQUIRED) ``` - 在代码中显式加载DLL(适用于动态加载): ```cpp #include <Windows.h> HMODULE hModule = LoadLibrary(L"opencv_aruco342.dll"); if (!hModule) { qDebug() << "Error loading DLL: " << GetLastError(); } ``` --- #### 典型错误排查案例 某开发者通过以下步骤解决问题: 1. 发现DLL路径包含空格(`C:\Program Files\opencv`) 2.OpenCV重装至`D:\opencv342` 3. 更新`.pro`文件中的`LIBS`路径 4. 重新安装VC++ 2015-2019运行库 5. 错误消除[^2] ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值