效果圖
代碼:
# #day03 # # #將多張不同大小、通道的圖片展示在同一窗口 # # 定義函數,第一個參數是縮放比例,第二個參數是需要顯示的圖片組成的元組或者列表 # def ManyImgs(scale, imgarray): # rows = len(imgarray) # 元組或者列表的長度 # cols = len(imgarray[0]) # 如果imgarray是列表,返回列表里第一幅圖像的通道數,如果是元組,返回元組里包含的第一個列表的長度 # # print("rows=", rows, "cols=", cols) # # # 判斷imgarray[0]的類型是否是list # # 是list,表明imgarray是一個元組,需要垂直顯示 # rowsAvailable = isinstance(imgarray[0], list) # # # 第一張圖片的寬高 # width = imgarray[0][0].shape[1] # height = imgarray[0][0].shape[0] # # print("width=", width, "height=", height) # # # 如果傳入的是一個元組 # if rowsAvailable: # for x in range(0, rows): # for y in range(0, cols): # # 遍歷元組,如果是第一幅圖像,不做變換 # if imgarray[x][y].shape[:2] == imgarray[0][0].shape[:2]: # imgarray[x][y] = cv2.resize(imgarray[x][y], (0, 0), None, scale, scale) # # 將其他矩陣變換為與第一幅圖像相同大小,縮放比例為scale # else: # imgarray[x][y] = cv2.resize(imgarray[x][y], (imgarray[0][0].shape[1], imgarray[0][0].shape[0]), None, scale, scale) # # 如果圖像是灰度圖,將其轉換成彩色顯示 # if len(imgarray[x][y].shape) == 2: # imgarray[x][y] = cv2.cvtColor(imgarray[x][y], cv2.COLOR_GRAY2BGR) # # # 創建一個空白畫布,與第一張圖片大小相同 # imgBlank = np.zeros((height, width, 3), np.uint8) # hor = [imgBlank] * rows # 與第一張圖片大小相同,與元組包含列表數相同的水平空白圖像 # for x in range(0, rows): # # 將元組里第x個列表水平排列 # hor[x] = np.hstack(imgarray[x]) # ver = np.vstack(hor) # 將不同列表垂直拼接 # # 如果傳入的是一個列表 # else: # # 變換操作,與前面相同 # for x in range(0, rows): # if imgarray[x].shape[:2] == imgarray[0].shape[:2]: # imgarray[x] = cv2.resize(imgarray[x], (0, 0), None, scale, scale) # else: # imgarray[x] = cv2.resize(imgarray[x], (imgarray[0].shape[1], imgarray[0].shape[0]), None, scale, scale) # if len(imgarray[x].shape) == 2: # imgarray[x] = cv2.cvtColor(imgarray[x], cv2.COLOR_GRAY2BGR) # # 將列表水平排列 # hor = np.hstack(imgarray) # ver = hor # return ver # # #繪制輪廓 # def getContours(img): # coutours,hierarchy=cv2.findContours(img,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_NONE) # for cnt in coutours: # area=cv2.contourArea(cnt) # if area>100: # cv2.drawContours(imgcontours, cnt, -1, (0, 0, 255), 5) # #周長 # peri=cv2.arcLength(cnt,True) # print(peri) # #擬合輪廓點集 # approx=cv2.approxPolyDP(cnt,0.03*peri,True) # print((approx)) # objcor=len(approx) # # x,y,w,h=cv2.boundingRect(approx) # cv2.rectangle(imgcontours,(x,y),(x+w,y+h),(255,0,0),5) # if objcor==3: # # imgr=paint_chinese_opencv(imgcontours,"三角形",(x+(w//2)-10,y+(h//2)-10),(255,255,255)) # cv2.putText(imgcontours,"SanJiaoXing",(x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,0),2) # elif objcor==4:cv2.putText(imgcontours,"ZhengFangXing",(x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,0),2) # else:cv2.putText(imgcontours,str(objcor)+"YuanXing",(x+(w//2)-10,y+(h//2)-10),cv2.FONT_HERSHEY_COMPLEX,1,(0,0,0),2) # # # img1=cv2.imread("C:/Users/31132/Desktop/xingz.jpg") # imgcontours=img1.copy() # imggry=cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY) # imgblur=cv2.GaussianBlur(imggry,(3,3),2) # imgcanny=cv2.Canny(imgblur,30,30) # # getContours(imgcanny) # imgblank=np.zeros_like(img1) # imgs=ManyImgs(0.3,([img1,imggry,imgblur],[imgcanny,imgcontours,imgblank])) # # cv2.imshow("1",imgs) # # imgsres=ManyImgs(0.6,[img1,imgcontours]) # cv2.imshow("res",imgsres # ) # cv2.waitKey(0)