コード例 #1
0
    def run(self):
        global Update
        global MorphOps
        global Channel
        global Realtime
        global bflag
        global show_backproj

        self.get_img()

        if self.selection:

            self.make_selection()
        if self.tracking_state == 2:
            READY[self.video_src] = False
            self.track()
            font = cv2.FONT_HERSHEY_SIMPLEX
            print "Target Missing."
            cv2.putText(self.vis, 'Target Missing', (10, 400), font, 1,
                        (255, 255, 255), 2, 1)
        elif self.tracking_state == 1:
            READY[self.video_src] = True
            self.selection = None
            self.track()
            if self.show_backproj:
                self.vis[:] = prob[..., np.newaxis]
            xx0, yy0, xx1, yy1 = self.track_window
            img_roi = self.frame[yy0:yy0 + yy1, xx0:xx0 + xx1]
            cv2.imshow("Tracking Window" + str(self.video_src), img_roi)
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(self.vis, str(self.track_box[0]), (10, 400), font, 1,
                        (255, 255, 255), 2, 1)
            status[self.video_src] = self.track_box[0]
            #print str(track_box[0])
            #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2)
            #except: print track_box
            mark.draw_machine_mark(60, self.track_box[0], self.vis)

        #cv2.imshow('Original Footage',self.frame)
        if flag:
            cv2.imshow('camshift' + str(self.video_src), self.vis)

        ch = 0xFF & cv2.waitKey(5)
        if ch == 27:
            bflag = False
        if ch == ord('b'):
            show_backproj = not show_backproj
        if ch == ord('m'):
            MorphOps = not MorphOps
        if ch == ord('c'):
            Channel = not Channel
        if ch == ord('u'):
            Update = not Update
        if ch == ord('r'):
            Realtime = not Realtime
コード例 #2
0
    def run(self):
        global Update
        global MorphOps
        global Channel
        global Realtime
        global bflag
        global show_backproj

        self.get_img()

        if self.selection:

            self.make_selection()
        if self.tracking_state == 2:
            READY[self.video_src] = False
            self.track()
            font = cv2.FONT_HERSHEY_SIMPLEX
            print "Target Missing."
            cv2.putText(self.vis, "Target Missing", (10, 400), font, 1, (255, 255, 255), 2, 1)
        elif self.tracking_state == 1:
            READY[self.video_src] = True
            self.selection = None
            self.track()
            if self.show_backproj:
                self.vis[:] = prob[..., np.newaxis]
            xx0, yy0, xx1, yy1 = self.track_window
            img_roi = self.frame[yy0 : yy0 + yy1, xx0 : xx0 + xx1]
            cv2.imshow("Tracking Window" + str(self.video_src), img_roi)
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(self.vis, str(self.track_box[0]), (10, 400), font, 1, (255, 255, 255), 2, 1)
            status[self.video_src] = self.track_box[0]
            # print str(track_box[0])
            # try: cv2.ellipse(vis, track_box, (0, 0, 255), 2)
            # except: print track_box
            mark.draw_machine_mark(60, self.track_box[0], self.vis)

        # cv2.imshow('Original Footage',self.frame)
        if flag:
            cv2.imshow("camshift" + str(self.video_src), self.vis)

        ch = 0xFF & cv2.waitKey(5)
        if ch == 27:
            bflag = False
        if ch == ord("b"):
            show_backproj = not show_backproj
        if ch == ord("m"):
            MorphOps = not MorphOps
        if ch == ord("c"):
            Channel = not Channel
        if ch == ord("u"):
            Update = not Update
        if ch == ord("r"):
            Realtime = not Realtime
コード例 #3
0
    def run(self):
        global Update
        global MorphOps
        global Channel
        global Realtime
        while True:

            ret, self.frame = self.cam.read()
            vis = self.frame.copy()
            hsv = cv2.cvtColor(self.frame, cv2.COLOR_BGR2HSV)
            mask = cv2.inRange(hsv, np.array((0., 60., 32.)),
                               np.array((180., 255., 255.)))
            mask = cv2.inRange(hsv, np.array((0., 0., 0.)),
                               np.array((180., 255., 255.)))
            if self.selection:
                x0, y0, x1, y1 = self.selection
                self.track_window = (x0, y0, x1 - x0, y1 - y0)
                hsv_roi = hsv[y0:y1, x0:x1]
                mask_roi = mask[y0:y1, x0:x1]

                if Channel:
                    hist = cv2.calcHist([hsv_roi], [0, 1], mask_roi, [16, 5],
                                        [0, 180, 0, 256])
                else:
                    hist = cv2.calcHist([hsv_roi], [0], mask_roi, [16],
                                        [0, 180])
                cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
                self.hist = hist.reshape(-1)
                self.show_hist()

                vis_roi = vis[y0:y1, x0:x1]
                cv2.bitwise_not(vis_roi, vis_roi)
                vis[mask == 0] = 0

            if self.tracking_state == 2:
                if Channel:
                    prob = cv2.calcBackProject([hsv], [0, 1], self.hist,
                                               [0, 180, 0, 256], 1)
                else:
                    prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180],
                                               1)
                prob &= mask
                term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT,
                             10, 1)
                self.previous_window = self.track_window
                kernel = np.ones((5, 5), np.uint8)
                if MorphOps:
                    prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel)
                    prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
                prob = cv2.GaussianBlur(prob, (5, 5), 0)

                track_box, self.track_window = cv2.CamShift(
                    prob, self.track_window, term_crit)
                if get_window_size(self.track_window) <= size_treshold:
                    self.track_window = get_increased_window(
                        self.previous_window)
                    self.tracking_state = 2
                else:
                    self.tracking_state = 1
                font = cv2.FONT_HERSHEY_SIMPLEX
                print "Target Missing."
                cv2.putText(vis, 'Target Missing', (10, 400), font, 1,
                            (255, 255, 255), 2, 1)

            if self.tracking_state == 1:
                self.selection = None
                if Channel:
                    prob = cv2.calcBackProject([hsv], [0, 1], self.hist,
                                               [0, 180, 0, 256], 1)
                else:
                    prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180],
                                               1)
                prob &= mask
                term_crit = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT,
                             10, 1)
                self.previous_window = self.track_window
                kernel = np.ones((5, 5), np.uint8)
                if MorphOps:
                    prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel)
                    prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
                prob = cv2.GaussianBlur(prob, (5, 5), 0)
                track_box, self.track_window = cv2.CamShift(
                    prob, self.track_window, term_crit)
                if get_window_size(self.track_window) <= size_treshold:
                    self.track_window = get_increased_window(
                        self.previous_window)
                    self.tracking_state = 2
                if self.show_backproj:
                    vis[:] = prob[..., np.newaxis]
                xx0, yy0, xx1, yy1 = self.track_window
                img_roi = self.frame[yy0:yy0 + yy1, xx0:xx0 + xx1]
                cv2.imshow("Tracking Window", img_roi)
                if get_window_size(
                        self.track_window) >= size_treshold and Update:
                    self.bkp = self.hist
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.putText(vis, 'Updating...', (10, 200), font, 1,
                                (255, 255, 255), 2, 1)
                    xx0, yy0, xx1, yy1 = self.track_window
                    xx1 /= 3
                    yy1 /= 3
                    xx0 += xx1
                    yy0 += yy1
                    if xx1 > 0 and yy1 > 0:
                        print self.track_window
                        hsv_roi = hsv[yy0:yy0 + yy1, xx0:xx0 + xx1]
                        mask_roi = mask[yy0:yy0 + yy1, xx0:xx0 + xx1]
                        cv2.imshow("Tracking Window", hsv_roi)
                        hist = cv2.calcHist([hsv_roi], [0], mask_roi, [16],
                                            [0, 180])
                        cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
                        print cv2.compareHist(hist.reshape(-1), self.bkp, 0)
                        self.hist = hist.reshape(-1)
                    self.show_hist()
                    if not Realtime:
                        Update = not Update
                font = cv2.FONT_HERSHEY_SIMPLEX
                cv2.putText(vis, str(track_box[0]), (10, 400), font, 1,
                            (255, 255, 255), 2, 1)
                print str(track_box[0])
                #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2)
                #except: print track_box
                mark.draw_machine_mark(60, track_box[0], vis)

            #cv2.imshow('Original Footage',self.frame)
            if flag:
                cv2.imshow('camshift', vis)

            ch = 0xFF & cv2.waitKey(5)
            if ch == 27:
                break
            if ch == ord('b'):
                self.show_backproj = not self.show_backproj
            if ch == ord('m'):
                MorphOps = not MorphOps
            if ch == ord('c'):
                Channel = not Channel
            if ch == ord('u'):
                Update = not Update
            if ch == ord('r'):
                Realtime = not Realtime
        cv2.destroyAllWindows()
コード例 #4
0
    def run(self):
        global Update
        global MorphOps
        global Channel
        global Realtime
        while True:

            ret, self.frame = self.cam.read()
            vis = self.frame.copy()
            hsv = cv2.cvtColor(self.frame, cv2.COLOR_BGR2HSV)
            mask = cv2.inRange(hsv, np.array((0., 60., 32.)), np.array((180., 255., 255.)))
            mask = cv2.inRange(hsv, np.array((0., 0., 0.)), np.array((180., 255., 255.)))
            if self.selection:
                x0, y0, x1, y1 = self.selection
                self.track_window = (x0, y0, x1-x0, y1-y0)
                hsv_roi = hsv[y0:y1, x0:x1]
                mask_roi = mask[y0:y1, x0:x1]
                
                if Channel:
                    hist = cv2.calcHist( [hsv_roi], [0,1], mask_roi, [16,5], [0, 180, 0 ,256] )
                else:
                    hist = cv2.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] )
                cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
                self.hist = hist.reshape(-1)
                self.show_hist()

                vis_roi = vis[y0:y1, x0:x1]
                cv2.bitwise_not(vis_roi, vis_roi)
                vis[mask == 0] = 0

            if self.tracking_state == 2:
                if Channel:
                    prob = cv2.calcBackProject([hsv], [0,1], self.hist, [0, 180, 0, 256], 1)
                else:
                    prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1)
                prob &= mask
                term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
                self.previous_window = self.track_window
                kernel = np.ones((5,5),np.uint8)
                if MorphOps:
                    prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel)
                    prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
                prob = cv2.GaussianBlur(prob,(5,5),0)

                track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit)
                if get_window_size(self.track_window) <= size_treshold:
                    self.track_window = get_increased_window(self.previous_window)
                    self.tracking_state = 2
                else :
                    self.tracking_state = 1
                font = cv2.FONT_HERSHEY_SIMPLEX
                print "Target Missing."
                cv2.putText(vis,'Target Missing',(10,400), font, 1,(255,255,255),2,1)

            if self.tracking_state == 1:
                self.selection = None
                if Channel:
                    prob = cv2.calcBackProject([hsv], [0,1], self.hist, [0, 180, 0, 256], 1)
                else:
                    prob = cv2.calcBackProject([hsv], [0], self.hist, [0, 180], 1)
                prob &= mask
                term_crit = ( cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 1 )
                self.previous_window = self.track_window
                kernel = np.ones((5,5),np.uint8)
                if MorphOps:
                    prob = cv2.morphologyEx(prob, cv2.MORPH_OPEN, kernel)
                    prob = cv2.morphologyEx(prob, cv2.MORPH_CLOSE, kernel)
                prob = cv2.GaussianBlur(prob,(5,5),0)
                track_box, self.track_window = cv2.CamShift(prob, self.track_window, term_crit)
                if get_window_size(self.track_window) <= size_treshold:
                    self.track_window = get_increased_window(self.previous_window)
                    self.tracking_state = 2
                if self.show_backproj:
                    vis[:] = prob[...,np.newaxis]
                xx0, yy0, xx1, yy1 = self.track_window
                img_roi = self.frame[yy0 : yy0 + yy1, xx0 : xx0 + xx1]
                cv2.imshow("Tracking Window",img_roi)
                if get_window_size(self.track_window) >= size_treshold and Update:
                    self.bkp=self.hist
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.putText(vis,'Updating...',(10,200), font, 1,(255,255,255),2,1)
                    xx0, yy0, xx1, yy1 = self.track_window
                    xx1 /= 3
                    yy1 /= 3
                    xx0 += xx1
                    yy0 += yy1
                    if xx1 > 0 and yy1 > 0:
                        print self.track_window
                        hsv_roi = hsv[yy0 : yy0 + yy1, xx0 : xx0 + xx1]
                        mask_roi = mask[yy0 : yy0 + yy1 , xx0 : xx0 + xx1]
                        cv2.imshow("Tracking Window",hsv_roi)
                        hist = cv2.calcHist( [hsv_roi], [0], mask_roi, [16], [0, 180] )
                        cv2.normalize(hist, hist, 0, 255, cv2.NORM_MINMAX)
                        print cv2.compareHist(hist.reshape(-1), self.bkp, 0)
                        self.hist = hist.reshape(-1)
                    self.show_hist()
                    if not Realtime:
                        Update = not Update
                font = cv2.FONT_HERSHEY_SIMPLEX
                cv2.putText(vis,str(track_box[0]),(10,400), font, 1,(255,255,255),2,1)
                print str(track_box[0])
                #try: cv2.ellipse(vis, track_box, (0, 0, 255), 2)
                #except: print track_box
                mark.draw_machine_mark(60, track_box[0], vis)

            #cv2.imshow('Original Footage',self.frame)
            if flag:
                cv2.imshow('camshift', vis)

            ch = 0xFF & cv2.waitKey(5)
            if ch == 27:
                break
            if ch == ord('b'):
                self.show_backproj = not self.show_backproj
            if ch == ord('m'):
                MorphOps = not MorphOps
            if ch == ord('c'):
                Channel = not Channel
            if ch == ord('u'):
                Update = not Update
            if ch == ord('r'):
                Realtime = not Realtime
        cv2.destroyAllWindows()