ฉันต้องการทราบขอบเขตของการเรียงต่อหกเหลี่ยมในภาพถ่ายเหมือนในภาพด้านล่าง:
สำหรับฉันแล้วดูเหมือนว่าวิธีการมาตรฐานที่กริดสแควร์คือการตรวจจับมุม (เช่นแสนอร่อย) ก่อนแล้วจึงแยกเส้นที่ยาวที่สุดผ่านการแปลง Houghหรือสิ่งที่คล้ายกัน
นี่ไม่ใช่วิธีที่ดีที่สุดในการปูกระเบื้องด้วยเลขฐานสิบหกเนื่องจากความยาวของเส้นด้านนอกสั้นกว่าและเป็นการยากที่จะแยกพวกมันออกจากเส้นอื่น
มีอัลกอริธึมที่จะแก้ไขปัญหานี้หรือไม่? มันเป็นเรื่องดีที่จะมีทางออกใน opencv แต่ฉันก็สนใจในความคิดทั่วไป
อัปเดต:
ด้วย python และ opencv ฉันสามารถรับผลลัพธ์นี้ได้:
นี่คือรหัสของฉัน:
import cv2
import numpy as np
imgOrig = "test1";
img = cv2.imread(imgOrig+".jpg");
lap = cv2.Laplacian(img, cv2.IPL_DEPTH_32F, ksize = 3)
imgray = cv2.cvtColor(lap,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(imgray,127,255,0)
contours, hierarchy = cv2.findContours(thresh,cv2.RETR_TREE,cv2.CHAIN_APPROX_NONE)
size = img.shape
m = np.zeros(size, dtype=np.uint8)
for i, cnt in enumerate(contours):
if cv2.contourArea(cnt) >= 1:
color = (255,255,255)
cv2.drawContours(m, cnt, -1, color, -1)
cv2.imwrite(str(imgOrig)+"contours.jpg", m);
Laplacian ของภาพดูเหมือนว่า:
ฉันจะพยายามปรับพารามิเตอร์ของวิธีการนี้ให้ดีที่สุดแล้วลองปรับเปลี่ยนขอบเขตของส่วนทั้งสี่