opencv入門——檢測圖片中的簡單形狀


 

效果圖

 

代碼:

# #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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM