gpt4 book ai didi

c++ - 使用颜色差异查找眼角坐标

转载 作者:太空宇宙 更新时间:2023-11-03 22:59:29 24 4
gpt4 key购买 nike

我正在使用 opencv 2.4.2 和 c++。我有一张人脸图像。从图片的左侧开始,我想以最简单的方式确定一个眼角的坐标。我的程序如下:

  1. 人脸图像输入

  2. 从上往下扫描图片,直到遇到肤色和眼角第一个白色像素之间的某种差异

  3. 在这个角上画一个红点

  4. 不继续扫描图像

  5. 显示该点的 (x,y) 坐标

我到现在为止:

int main() {
Mat img = imread("MVC-003F.jpg");

for(int i = 0; i < img.rows; i++) {
for(int j = 0; j < img.cols; j++) {
Vec3b color = img.at<Vec3b>(Point(i,j));
if(color.val[0] == 255 && color.val[1] == 255 && color.val[2] == 255)
cout << (Point(i,j)) << endl;
}

}

imshow("out", img);
waitKey(0);
return 0;
}

显然,这并没有解决我的问题,而是返回了一个错误。扫描图像后,我无法确定是否需要将 cvtColor 转换为 HSV 和阈值或继续使用 RGB。

这是我想要实现的图片(一只眼角处的红点):

enter image description here

最佳答案

我很欣赏你追求简单的目标。白色物体颜色并不总是会产生白色像素,并且由于镜面反射或过度曝光,非白色颜色可能会变成白色像素。顺便说一下,你的眼角的灰度强度是 209,而不是 255。并且非常接近这个强度(值为 200)还有一些其他像素,如下图所示。这意味着依靠像素强度可能不会让您走得太远。

enter image description here

您提到了“肤色和眼角第一个白色像素之间的某种差异”,但您没有测量差异 - 您只检查了其中一个值。事实上,您可以根据需要检查任意多的差异,如下面的过滤器所示。比较差异可能是一种您可以改进的好方法,但要查看特定位置的差异。

只需使用 matchTemplate() 将您的图像与一些模式过滤器进行卷积即可找到适合进一步分析的区域。例如,在你的灰色模糊图像与下面的过滤器(由 3 个水平条纹组成:白色、深色、白色)卷积后,我得到了这个结果,你可以轻松定位眼睛甚至嘴巴的垂直位置。要获得更多过滤器配置,请尽早查看本文 Ada boost paper for face detection.

enter image description here enter image description here enter image description here

关于c++ - 使用颜色差异查找眼角坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22137953/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com