Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 为什么HoughCircles在尝试检测虹膜时返回0个圆?_Opencv_Detection_Hough Transform_Iris Recognition - Fatal编程技术网

Opencv 为什么HoughCircles在尝试检测虹膜时返回0个圆?

Opencv 为什么HoughCircles在尝试检测虹膜时返回0个圆?,opencv,detection,hough-transform,iris-recognition,Opencv,Detection,Hough Transform,Iris Recognition,我正在尝试检测眼睛的虹膜,但HoughCircles返回0个圆 输入图像(眼睛)为: 然后我用这张图片做了以下事情: cvtColor(eyes, gray, CV_BGR2GRAY); morphologyEx(gray, gray, 4,cv::getStructuringElement(cv::MORPH_RECT,cv::Size(3,3))); threshold(gray, gray, 0, 255, THRESH_OTSU); vector<Vec3f> circle

我正在尝试检测眼睛的虹膜,但
HoughCircles
返回0个圆

输入图像(眼睛)为:

然后我用这张图片做了以下事情:

cvtColor(eyes, gray, CV_BGR2GRAY);
morphologyEx(gray, gray, 4,cv::getStructuringElement(cv::MORPH_RECT,cv::Size(3,3)));
threshold(gray, gray, 0, 255, THRESH_OTSU);
vector<Vec3f> circles;
HoughCircles(gray, circles, CV_HOUGH_GRADIENT, 2, gray.rows/4);
if (circles.size())
        cout << "found" << endl;
CVT颜色(眼睛,灰色,CV_bgr2灰色);
形态学(灰色,灰色,4,cv::getStructuringElement(cv::变形校正,cv::大小(3,3));
阈值(灰色、灰色、0、255、阈值);
矢量圆;
HoughCircles(灰色,圆形,CV_HOUGH_渐变,2,灰色。行/4);
if(circles.size())

我曾经为同样的问题面对过同样的问题。原来houghcircles并不是一个很好的检测形状不太好的圆的方法

在这些情况下,像MSER这样的特征检测方法工作得更好

import cv2
import math
import numpy as np
import sys

def non_maximal_supression(x):
    for f in features:
        distx = f.pt[0] - x.pt[0]
        disty = f.pt[1] - x.pt[1]
        dist = math.sqrt(distx*distx + disty*disty)
        if (f.size > x.size) and (dist<f.size/2):
            return True

thresh = 70
img = cv2.imread(sys.argv[1])
bw = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

detector = cv2.FeatureDetector_create('MSER')
features = detector.detect(bw)
features.sort(key = lambda x: -x.size)

features = [ x for x in features if x.size > 70] 
reduced_features = [x for x in features if not non_maximal_supression(x)]

for rf in reduced_features:
    cv2.circle(img, (int(rf.pt[0]), int(rf.pt[1])), int(rf.size/2), (0,0,255), 3)

cv2.imshow("iris detection", img)
cv2.waitKey()
导入cv2
输入数学
将numpy作为np导入
导入系统
def非最大抑制(x):
对于功能中的f:
distx=f.pt[0]-x.pt[0]
disty=f.pt[1]-x.pt[1]
dist=math.sqrt(distx*distx+disty*disty)
如果(f.尺寸>x.尺寸)和(距离70]
减少的_特征=[x为特征中的x,如果不是非_最大_抑制(x)]
对于射频输入功能:
cv2.圆(img,(int(rf.pt[0]),int(rf.pt[1])),int(rf.size/2),(0,0255),3)
cv2.imshow(“虹膜检测”,img)
cv2.waitKey()

或者,您可以尝试卷积滤波器

编辑:
对于那些有C++问题的人来说,是一个基本的要点。< /P>你可以给我一个提示如何在C++中实现MSER吗?这对我来说是不太重要的,因为OpenCV文档很差。是一个例子。我会留给非极大的抑制部分来实现。抱歉,我不熟悉OpenCV java API。这看起来是OpenCV 2。我应该如何使它适应opencv 3.X?