樹莓派座標,本次可以裁剪1到100成功

import numpy as np
import cv2  # 導入opencv模塊
# 迷宮中0的位置代表牆,不能走
# 8代表入口,1代表可走位置
# 888代表出口
migong = '''
0	0	0	0	0	0	0	0	0	0	0	0
0	1	0	1	1	1	1	1	1	1	1	0
0	1	1	1	1	0	1	1	1	1	0	0
0	1	1	1	1	1	1	1	1	888	1	0
0	0	1	0	0	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	0	1	1	1	1	0	0	0	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	8	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1  	0
0	0	0	0	0	0	0	0	0	0	0	0'''
data = np.array(migong.split(), dtype=int).reshape((12, 12))#以空格爲分隔符,強制裝換成int
 
 
def yanseshibie():  # 創建一個函數,函數名隨意定義
    #初始化變量
    i=1
    y0 = 0
    y1 = 49
    x0 = 0
    x1 = 63
    x3=0
    y3=0
    while(True):
 
        frame = cv2.imread("/home/pi/tupian/cheku_xinban1111.jpg")
        cv2.imshow("original", frame)  # 輸出視頻每一幀
        frame= frame[y0:y1, x0:x1]  # 裁剪座標爲[y0:y1, x0:x1]
        cv2.imwrite('/home/pi/migong_tupian/'+str(i)+'.jpg',frame)
       
        
        x0 = x0+63
        x1 = x1+63
        #y3 = y3+1
        if i%10==0:
            y0 = y0+49
            y1 = y1+49
            x0 = 0
            x1 = 63
            x3 = x3+1
            y3 = 0
        i=i+1#每次進入循環加1
        if(i>=101):
            break
        #a = frame.size
        #print("像素值:",a)
 
        # 將這一幀圖像BGR轉換爲HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 這一幀圖像限定在HSV藍色的範圍
        blue_lower = np.array([0, 100, 50])
        blue_upper = np.array([10, 255, 225]) 
 
        # 閾值HSV圖像以僅獲得所選顏色,將圖像二值化
        # 就是將低於lower_red和高於upper_red的部分分別變成0,lower_red~upper_red之間的值變成255
        blue_mask = cv2.inRange(hsv, blue_lower, blue_upper)
        
 
 
        # Bitwise-AND屏蔽原始圖像
        blue_res = cv2.bitwise_and(frame, frame, mask=blue_mask)
 
        # 結構元素
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
 
        # 形態學結束
        blue_closing = cv2.morphologyEx(blue_res, cv2.MORPH_CLOSE, kernel)
 
        # 轉換爲黑白圖像
        blue_gray = cv2.cvtColor(blue_closing, cv2.COLOR_BGR2GRAY)
        (thresh2, blue_bw) = cv2.threshold(blue_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 
        # 計算像素變化
        blue_black = cv2.countNonZero(blue_bw)
        print("白色區域:", blue_black)
        if blue_black > 100:
          #  print("視頻中有藍色像素")
            data[x3,y3]=4
            
        print(x3,y3)
        y3 = y3+1
            
        #else:
            #print("無藍色")
 
        # 顯示結果幀
        cv2.imshow('blue_quyu', blue_bw)
 
def direction_set(data):
    """
        函數功能,找到data中未被走過的地方,並同時記錄該地方能夠走的地方
    """
    dir_set = {}
    v, h = np.where(data > 0)
    for i, j in zip(v, h):
        key = str(i) + str(j)
        if data[i, j + 1] > 0:  # 該地方東鄰塊是否能走
            dir_set[key] = [str(i) + str(j + 1)]
        if data[i + 1, j] > 0:  # 該地方南鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i + 1) + str(j)]
            else:
                dir_set[key] = [str(i + 1) + str(j)]
        # data[i, j-1]
        if data[i, j - 1] > 0:  # 該地方西鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i) + str(j - 1)]
            else:
                dir_set[key] = [str(i) + str(j - 1)]
        # data[i-1, j]
        if data[i - 1, j] > 0:  # 該地方北鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i - 1) + str(j)]
            else:
                dir_set[key] = [str(i - 1) + str(j)]
    return dir_set
 
 
def get_forward_step(exit_index):
    layer_ori = ['92']  # 存放第一層信息
    while True:
        layer_sec = []  # 存放第二層信息
        for key in layer_ori:  # 將layer_ori裏面所能達到的位置,存放在layer_sec中
            layer_sec += direction[key]
            if exit_index in direction[key]:
                forward_step = key
        if exit_index in layer_sec: break
        layer_ori = layer_sec
    return forward_step
 
 
if __name__ == '__main__':
 
    yanseshibie()
 
    direction = direction_set(data)
    
    huish = ['39']
    # data[int(huish[0][0]), int(huish[0][1])] = 888 #將出口用888標記
    while True:
        forward_step = get_forward_step(huish[-1])
        huish += [forward_step]
        if forward_step == '92':
            break
    step = huish[::-1][:-1]
    for ind in step:
        data[int(ind[0]), int(ind[1])] = -8
    print(data)
    print(step)

本次修改只有11張圖片沒有識別到,

import numpy as np
import cv2  # 導入opencv模塊
# 迷宮中0的位置代表牆,不能走
# 8代表入口,1代表可走位置
# 888代表出口
migong = '''
0	0	0	0	0	0	0	0	0	0	0	0
0	1	0	1	1	1	1	1	1	1	1	0
0	1	1	1	1	0	1	1	1	1	0	0
0	1	1	1	1	1	1	1	1	888	1	0
0	0	1	0	0	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	0	1	1	1	1	0	0	0	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	8	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1  	0
0	0	0	0	0	0	0	0	0	0	0	0'''
data = np.array(migong.split(), dtype=int).reshape((12, 12))#以空格爲分隔符,強制裝換成int
 
 
def yanseshibie():  # 創建一個函數,函數名隨意定義
    #初始化變量
    i=1
    y0 = 0
    y1 = 49
    x0 = 0
    x1 = 63
    x3=1
    y3=1
    a=0
    while(True):
 
        frame = cv2.imread("/home/pi/tupian/cheku_xinban1111.jpg")
        cv2.imshow("original", frame)  # 輸出視頻每一幀
        frame= frame[y0:y1, x0:x1]  # 裁剪座標爲[y0:y1, x0:x1]
        cv2.imwrite('/home/pi/migong_tupian/'+str(i)+'.jpg',frame)
       
        
        x0 = x0+63
        x1 = x1+63

        #y3 = y3+1
        if i%10==1 and i!=1:
          
            y0 = y0+49
            y1 = y1+49
            x0 = 0
            x1 = 63
            x3 = x3+1
            y3 = 1

        i=i+1#每次進入循環加1
        if(i>=101):
            break
        #a = frame.size
        #print("像素值:",a)
 
        # 將這一幀圖像BGR轉換爲HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 這一幀圖像限定在HSV藍色的範圍
        blue_lower = np.array([0, 100, 50])
        blue_upper = np.array([10, 255, 225]) 
 
        # 閾值HSV圖像以僅獲得所選顏色,將圖像二值化
        # 就是將低於lower_red和高於upper_red的部分分別變成0,lower_red~upper_red之間的值變成255
        blue_mask = cv2.inRange(hsv, blue_lower, blue_upper)
        
 
 
        # Bitwise-AND屏蔽原始圖像
        blue_res = cv2.bitwise_and(frame, frame, mask=blue_mask)
 
        # 結構元素
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
 
        # 形態學結束
        blue_closing = cv2.morphologyEx(blue_res, cv2.MORPH_CLOSE, kernel)
 
        # 轉換爲黑白圖像
        blue_gray = cv2.cvtColor(blue_closing, cv2.COLOR_BGR2GRAY)
        (thresh2, blue_bw) = cv2.threshold(blue_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 
        # 計算像素變化
        blue_black = cv2.countNonZero(blue_bw)
        print("白色區域:", blue_black)
        if blue_black > 100:
          #  print("視頻中有藍色像素")
            data[x3,y3]=4
            
        print(x3,y3)
        y3 = y3+1
            
        #else:
            #print("無藍色")
 
        # 顯示結果幀
        cv2.imshow('blue_quyu', blue_bw)
 
def direction_set(data):
    """
        函數功能,找到data中未被走過的地方,並同時記錄該地方能夠走的地方
    """
    dir_set = {}
    v, h = np.where(data > 0)
    for i, j in zip(v, h):
        key = str(i) + str(j)
        if data[i, j + 1] > 0:  # 該地方東鄰塊是否能走
            dir_set[key] = [str(i) + str(j + 1)]
        if data[i + 1, j] > 0:  # 該地方南鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i + 1) + str(j)]
            else:
                dir_set[key] = [str(i + 1) + str(j)]
        # data[i, j-1]
        if data[i, j - 1] > 0:  # 該地方西鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i) + str(j - 1)]
            else:
                dir_set[key] = [str(i) + str(j - 1)]
        # data[i-1, j]
        if data[i - 1, j] > 0:  # 該地方北鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i - 1) + str(j)]
            else:
                dir_set[key] = [str(i - 1) + str(j)]
    return dir_set
 
 
def get_forward_step(exit_index):
    layer_ori = ['92']  # 存放第一層信息
    while True:
        layer_sec = []  # 存放第二層信息
        for key in layer_ori:  # 將layer_ori裏面所能達到的位置,存放在layer_sec中
            layer_sec += direction[key]
            if exit_index in direction[key]:
                forward_step = key
        if exit_index in layer_sec: break
        layer_ori = layer_sec
    return forward_step
 
 
if __name__ == '__main__':
 
    yanseshibie()
 
    direction = direction_set(data)
    
    huish = ['39']
    # data[int(huish[0][0]), int(huish[0][1])] = 888 #將出口用888標記
    while True:
        forward_step = get_forward_step(huish[-1])
        huish += [forward_step]
        if forward_step == '92':
            break
    step = huish[::-1][:-1]
    for ind in step:
        data[int(ind[0]), int(ind[1])] = -8
    print(data)
    print(step)

if下面是下面的id的

import numpy as np
import cv2  # 導入opencv模塊
# 迷宮中0的位置代表牆,不能走
# 8代表入口,1代表可走位置
# 888代表出口
migong = '''
0	0	0	0	0	0	0	0	0	0	0	0
0	1	0	1	1	1	1	1	1	1	1	0
0	1	1	1	1	0	1	1	1	1	0	0
0	1	1	1	1	1	1	1	1	888	1	0
0	0	1	0	0	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	0	1	1	1	1	0	0	0	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	8	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1  	0
0	0	0	0	0	0	0	0	0	0	0	0'''
data = np.array(migong.split(), dtype=int).reshape((12, 12))#以空格爲分隔符,強制裝換成int
 
 
def yanseshibie():  # 創建一個函數,函數名隨意定義
    #初始化變量
    i=1
    y0 = 0
    y1 = 49
    x0 = 0
    x1 = 63
    x3=1
    y3=1
    a=0
    while(True):
 
        frame = cv2.imread("/home/pi/tupian/cheku_xinban1111.jpg")
        cv2.imshow("original", frame)  # 輸出視頻每一幀
        frame= frame[y0:y1, x0:x1]  # 裁剪座標爲[y0:y1, x0:x1]
        cv2.imwrite('/home/pi/migong_tupian/'+str(i)+'.jpg',frame)
       
        
        x0 = x0+63
        x1 = x1+63

        #y3 = y3+1
        if i%10==0 and i!=1:#下面是下一個的
          
            y0 = y0+49
            y1 = y1+49
            x0 = 0
            x1 = 63
            x3 = x3+1
            y3 = 1

    
        if(i>=100):
            break
        i=i+1#每次進入循環加1
        #a = frame.size
        #print("像素值:",a)
 
        # 將這一幀圖像BGR轉換爲HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 這一幀圖像限定在HSV藍色的範圍
        blue_lower = np.array([0, 100, 50])
        blue_upper = np.array([10, 255, 225]) 
 
        # 閾值HSV圖像以僅獲得所選顏色,將圖像二值化
        # 就是將低於lower_red和高於upper_red的部分分別變成0,lower_red~upper_red之間的值變成255
        blue_mask = cv2.inRange(hsv, blue_lower, blue_upper)
        
 
 
        # Bitwise-AND屏蔽原始圖像
        blue_res = cv2.bitwise_and(frame, frame, mask=blue_mask)
 
        # 結構元素
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
 
        # 形態學結束
        blue_closing = cv2.morphologyEx(blue_res, cv2.MORPH_CLOSE, kernel)
 
        # 轉換爲黑白圖像
        blue_gray = cv2.cvtColor(blue_closing, cv2.COLOR_BGR2GRAY)
        (thresh2, blue_bw) = cv2.threshold(blue_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 
        # 計算像素變化
        blue_black = cv2.countNonZero(blue_bw)
        print("白色區域:", blue_black)
        if blue_black > 100:
          #  print("視頻中有藍色像素")
            data[x3,y3]=4
            
        print(x3,y3)
        y3 = y3+1
            
        #else:
            #print("無藍色")
 
        # 顯示結果幀
        cv2.imshow('blue_quyu', blue_bw)
 
def direction_set(data):
    """
        函數功能,找到data中未被走過的地方,並同時記錄該地方能夠走的地方
    """
    dir_set = {}
    v, h = np.where(data > 0)
    for i, j in zip(v, h):
        key = str(i) + str(j)
        if data[i, j + 1] > 0:  # 該地方東鄰塊是否能走
            dir_set[key] = [str(i) + str(j + 1)]
        if data[i + 1, j] > 0:  # 該地方南鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i + 1) + str(j)]
            else:
                dir_set[key] = [str(i + 1) + str(j)]
        # data[i, j-1]
        if data[i, j - 1] > 0:  # 該地方西鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i) + str(j - 1)]
            else:
                dir_set[key] = [str(i) + str(j - 1)]
        # data[i-1, j]
        if data[i - 1, j] > 0:  # 該地方北鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i - 1) + str(j)]
            else:
                dir_set[key] = [str(i - 1) + str(j)]
    return dir_set
 
 
def get_forward_step(exit_index):
    layer_ori = ['92']  # 存放第一層信息
    while True:
        layer_sec = []  # 存放第二層信息
        for key in layer_ori:  # 將layer_ori裏面所能達到的位置,存放在layer_sec中
            layer_sec += direction[key]
            if exit_index in direction[key]:
                forward_step = key
        if exit_index in layer_sec: break
        layer_ori = layer_sec
    return forward_step
 
 
if __name__ == '__main__':
 
    yanseshibie()
 
    direction = direction_set(data)
    
    huish = ['39']
    # data[int(huish[0][0]), int(huish[0][1])] = 888 #將出口用888標記
    while True:
        forward_step = get_forward_step(huish[-1])
        huish += [forward_step]
        if forward_step == '92':
            break
    step = huish[::-1][:-1]
    for ind in step:
        data[int(ind[0]), int(ind[1])] = -8
    print(data)
    print(step)

半成品

import numpy as np
import cv2  # 導入opencv模塊
# 迷宮中0的位置代表牆,不能走
# 8代表入口,1代表可走位置
# 888代表出口
migong = '''
0	0	0	0	0	0	0	0	0	0	0	0
0	1	0	1	1	1	1	1	1	1	1	0
0	1	1	1	1	0	1	1	1	1	0	0
0	1	1	1	1	1	1	1	1	888	1	0
0	0	1	0	0	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	0	1	1	1	1	0	0	0	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1	0
0	1	8	1	1	1	1	1	1	1	1	0
0	1	1	1	1	1	1	1	1	1	1  	0
0	0	0	0	0	0	0	0	0	0	0	0'''
data = np.array(migong.split(), dtype=int).reshape((12, 12))#以空格爲分隔符,強制裝換成int
 
 
def yanseshibie():  # 創建一個函數,函數名隨意定義
    #初始化變量
    i=1
    y0 = 0
    y1 = 49
    x0 = 0
    x1 = 63
    x3=1
    y3=1
    a=0
    while(True):
            
        if i%10==1 and i!=1:#下面是下一個的
          
            y0 = y0+49
            y1 = y1+49
            x0 = 0
            x1 = 63
            x3 = x3+1
            y3 = 1
 
        frame = cv2.imread("/home/pi/tupian/cheku_xinban1111.jpg")
        cv2.imshow("original", frame)  # 輸出視頻每一幀
        frame= frame[y0:y1, x0:x1]  # 裁剪座標爲[y0:y1, x0:x1]
        cv2.imwrite('/home/pi/migong_tupian/'+str(i)+'.jpg',frame)
       
        
        x0 = x0+63
        x1 = x1+63
    
        if(i>=100):
            break
        i=i+1#每次進入循環加1
        #a = frame.size
        #print("像素值:",a)
 
        # 將這一幀圖像BGR轉換爲HSV
        hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
        # 這一幀圖像限定在HSV藍色的範圍
        blue_lower = np.array([0, 100, 50])
        blue_upper = np.array([10, 255, 225]) 
 
        # 閾值HSV圖像以僅獲得所選顏色,將圖像二值化
        # 就是將低於lower_red和高於upper_red的部分分別變成0,lower_red~upper_red之間的值變成255
        blue_mask = cv2.inRange(hsv, blue_lower, blue_upper)
        
 
 
        # Bitwise-AND屏蔽原始圖像
        blue_res = cv2.bitwise_and(frame, frame, mask=blue_mask)
 
        # 結構元素
        kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3))
 
        # 形態學結束
        blue_closing = cv2.morphologyEx(blue_res, cv2.MORPH_CLOSE, kernel)
 
        # 轉換爲黑白圖像
        blue_gray = cv2.cvtColor(blue_closing, cv2.COLOR_BGR2GRAY)
        (thresh2, blue_bw) = cv2.threshold(blue_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
 
        # 計算像素變化
        blue_black = cv2.countNonZero(blue_bw)
        print("白色區域:", blue_black)
        if blue_black > 100:
          #  print("視頻中有藍色像素")
            data[x3,y3]=4
            
        print(x3,y3)
        y3 = y3+1
            
        #else:
            #print("無藍色")
 
        # 顯示結果幀
        cv2.imshow('blue_quyu', blue_bw)
 
def direction_set(data):
    """
        函數功能,找到data中未被走過的地方,並同時記錄該地方能夠走的地方
    """
    dir_set = {}
    v, h = np.where(data > 0)
    for i, j in zip(v, h):
        key = str(i) + str(j)
        if data[i, j + 1] > 0:  # 該地方東鄰塊是否能走
            dir_set[key] = [str(i) + str(j + 1)]
        if data[i + 1, j] > 0:  # 該地方南鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i + 1) + str(j)]
            else:
                dir_set[key] = [str(i + 1) + str(j)]
        # data[i, j-1]
        if data[i, j - 1] > 0:  # 該地方西鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i) + str(j - 1)]
            else:
                dir_set[key] = [str(i) + str(j - 1)]
        # data[i-1, j]
        if data[i - 1, j] > 0:  # 該地方北鄰塊是否能走
            if key in dir_set:
                dir_set[key] += [str(i - 1) + str(j)]
            else:
                dir_set[key] = [str(i - 1) + str(j)]
    return dir_set
 
 
def get_forward_step(exit_index):
    layer_ori = ['92']  # 存放第一層信息
    while True:
        layer_sec = []  # 存放第二層信息
        for key in layer_ori:  # 將layer_ori裏面所能達到的位置,存放在layer_sec中
            layer_sec += direction[key]
            if exit_index in direction[key]:
                forward_step = key
        if exit_index in layer_sec: break
        layer_ori = layer_sec
    return forward_step
 
 
if __name__ == '__main__':
 
    yanseshibie()
 
    direction = direction_set(data)
    
    huish = ['39']
    # data[int(huish[0][0]), int(huish[0][1])] = 888 #將出口用888標記
    while True:
        forward_step = get_forward_step(huish[-1])
        huish += [forward_step]
        if forward_step == '92':
            break
    step = huish[::-1][:-1]
    for ind in step:
        data[int(ind[0]), int(ind[1])] = -8
    print(data)
    print(step)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章