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
Python 如何从OpenCV中的噪声图像估计圆_Python_Opencv - Fatal编程技术网

Python 如何从OpenCV中的噪声图像估计圆

Python 如何从OpenCV中的噪声图像估计圆,python,opencv,Python,Opencv,我正在使用OpenCV处理摄像机视频流中的图像。在一根金属丝焊接到电极上后,摄像机正在观察电极,我的目标是估计焊接中心的位置。我可以通过将图像转换为HSV和阈值色调(从6到20)来获得清晰的目标,但是得到的阈值非常嘈杂。您可以在阈值图像中清楚地看到圆形特征,但是组件没有连接,因此我无法使用HoughCircles获得良好的近似值。我也尝试过在等高线上使用MineConclosingCircle,在按面积排序后,但它并不更加一致,速度也慢得多。 很抱歉质量太差,我对编码还不熟悉,python是我唯

我正在使用OpenCV处理摄像机视频流中的图像。在一根金属丝焊接到电极上后,摄像机正在观察电极,我的目标是估计焊接中心的位置。我可以通过将图像转换为HSV和阈值色调(从6到20)来获得清晰的目标,但是得到的阈值非常嘈杂。您可以在阈值图像中清楚地看到圆形特征,但是组件没有连接,因此我无法使用HoughCircles获得良好的近似值。我也尝试过在等高线上使用MineConclosingCircle,在按面积排序后,但它并不更加一致,速度也慢得多。 很抱歉质量太差,我对编码还不熟悉,python是我唯一熟悉的语言。 我正在使用Python 3.0和OpenCV 4.3.0


请添加带批注的图像以显示该圆的位置。请添加带批注的图像以显示该圆的位置。
    frame_raw = cam.get_array()
    #frame_raw = np.load('frame_raw5.npy')#loads array directly instead of image
    frame_color = cv2.cvtColor(frame_raw,cv2.COLOR_BayerRG2RGB)#convert to color
    frame_down = cv2.pyrDown(frame_color)#scale down to speed up processing
    frame_blur = cv2.medianBlur(frame_down, int(2*values["-BLUR SLIDER-"]+1))
    frame_gray = cv2.cvtColor(frame_down,cv2.COLOR_BGR2GRAY)
    frame_HSV = cv2.cvtColor(frame_down, cv2.COLOR_BGR2HSV)
   
    frame_threshold = cv2.inRange(frame_HSV, (values["-LOW H-"], values["-LOW S-"], values["-LOW V-"]), (values["-HIGH H-"], values["-HIGH S-"], values["-HIGH V-"]))
    edges = cv2.Canny(frame_blur, values["-CANNY SLIDER A-"], values["-CANNY SLIDER B-"])
    #Try to find circles approximating weld----------------------------------------------------------------------------------------------------------------------
    try:
        #[ry1:ry2,rx1:rx2] is bounding box around the weld selected by cv2.ROI
        circles = cv2.HoughCircles(frame_threshold[ry1:ry2,rx1:rx2],cv2.HOUGH_GRADIENT,1,1,param1=1,param2=20,minRadius=100,maxRadius=200)
    except:
        None
    try:
        if circles is not None:            
            weld = np.around(np.average(circles, axis=1)).flatten().astype(int)#average all circles into one
            if len(weld_list) > 15: weld_list.pop()#add average to list, past averages from 15 frames
            weld_list.insert(0,weld)
            if weld_list:
                weld_centroid = np.average(weld_list,axis=0).astype(int)
        if values["-CIRCLES-"]:
            cv2.circle(frame_down[ry1:ry2,rx1:rx2,:],(weld_centroid[0],weld_centroid[1]),weld_centroid[2],(100,255,100),2)
            cv2.circle(frame_down[ry1:ry2,rx1:rx2,:],(weld_centroid[0],weld_centroid[1]),5,(100,255,100),-1)
    except:
        None