▲ 圖 掃描過程
簡 介: 利用cv2中的HoughCircles算子,檢測陰影圈模板中的圈。通過實驗可以驗證算法的可行性。并看到,其中檢測算法中和Canny算子閾值相關的參數對于檢測結果分布有一定的影響。
關鍵詞: Canny,HoughCircles,cv2,陰影圈
#mermaid-svg-A2oOAHdwVVneTdX8 .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .label text{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .node rect,#mermaid-svg-A2oOAHdwVVneTdX8 .node circle,#mermaid-svg-A2oOAHdwVVneTdX8 .node ellipse,#mermaid-svg-A2oOAHdwVVneTdX8 .node polygon,#mermaid-svg-A2oOAHdwVVneTdX8 .node path{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-A2oOAHdwVVneTdX8 .node .label{text-align:center;fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .node.clickable{cursor:pointer}#mermaid-svg-A2oOAHdwVVneTdX8 .arrowheadPath{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .edgePath .path{stroke:#333;stroke-width:1.5px}#mermaid-svg-A2oOAHdwVVneTdX8 .flowchart-link{stroke:#333;fill:none}#mermaid-svg-A2oOAHdwVVneTdX8 .edgeLabel{background-color:#e8e8e8;text-align:center}#mermaid-svg-A2oOAHdwVVneTdX8 .edgeLabel rect{opacity:0.9}#mermaid-svg-A2oOAHdwVVneTdX8 .edgeLabel span{color:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .cluster rect{fill:#ffffde;stroke:#aa3;stroke-width:1px}#mermaid-svg-A2oOAHdwVVneTdX8 .cluster text{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:12px;background:#ffffde;border:1px solid #aa3;border-radius:2px;pointer-events:none;z-index:100}#mermaid-svg-A2oOAHdwVVneTdX8 .actor{stroke:#ccf;fill:#ECECFF}#mermaid-svg-A2oOAHdwVVneTdX8 text.actor>tspan{fill:#000;stroke:none}#mermaid-svg-A2oOAHdwVVneTdX8 .actor-line{stroke:grey}#mermaid-svg-A2oOAHdwVVneTdX8 .messageLine0{stroke-width:1.5;stroke-dasharray:none;stroke:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .messageLine1{stroke-width:1.5;stroke-dasharray:2, 2;stroke:#333}#mermaid-svg-A2oOAHdwVVneTdX8 #arrowhead path{fill:#333;stroke:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .sequenceNumber{fill:#fff}#mermaid-svg-A2oOAHdwVVneTdX8 #sequencenumber{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 #crosshead path{fill:#333;stroke:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .messageText{fill:#333;stroke:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .labelBox{stroke:#ccf;fill:#ECECFF}#mermaid-svg-A2oOAHdwVVneTdX8 .labelText,#mermaid-svg-A2oOAHdwVVneTdX8 .labelText>tspan{fill:#000;stroke:none}#mermaid-svg-A2oOAHdwVVneTdX8 .loopText,#mermaid-svg-A2oOAHdwVVneTdX8 .loopText>tspan{fill:#000;stroke:none}#mermaid-svg-A2oOAHdwVVneTdX8 .loopLine{stroke-width:2px;stroke-dasharray:2, 2;stroke:#ccf;fill:#ccf}#mermaid-svg-A2oOAHdwVVneTdX8 .note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-A2oOAHdwVVneTdX8 .noteText,#mermaid-svg-A2oOAHdwVVneTdX8 .noteText>tspan{fill:#000;stroke:none}#mermaid-svg-A2oOAHdwVVneTdX8 .activation0{fill:#f4f4f4;stroke:#666}#mermaid-svg-A2oOAHdwVVneTdX8 .activation1{fill:#f4f4f4;stroke:#666}#mermaid-svg-A2oOAHdwVVneTdX8 .activation2{fill:#f4f4f4;stroke:#666}#mermaid-svg-A2oOAHdwVVneTdX8 .mermaid-main-font{font-family:"trebuchet ms", verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .section{stroke:none;opacity:0.2}#mermaid-svg-A2oOAHdwVVneTdX8 .section0{fill:rgba(102,102,255,0.49)}#mermaid-svg-A2oOAHdwVVneTdX8 .section2{fill:#fff400}#mermaid-svg-A2oOAHdwVVneTdX8 .section1,#mermaid-svg-A2oOAHdwVVneTdX8 .section3{fill:#fff;opacity:0.2}#mermaid-svg-A2oOAHdwVVneTdX8 .sectionTitle0{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .sectionTitle1{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .sectionTitle2{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .sectionTitle3{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .sectionTitle{text-anchor:start;font-size:11px;text-height:14px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .grid .tick{stroke:#d3d3d3;opacity:0.8;shape-rendering:crispEdges}#mermaid-svg-A2oOAHdwVVneTdX8 .grid .tick text{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .grid path{stroke-width:0}#mermaid-svg-A2oOAHdwVVneTdX8 .today{fill:none;stroke:red;stroke-width:2px}#mermaid-svg-A2oOAHdwVVneTdX8 .task{stroke-width:2}#mermaid-svg-A2oOAHdwVVneTdX8 .taskText{text-anchor:middle;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .taskText:not([font-size]){font-size:11px}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutsideRight{fill:#000;text-anchor:start;font-size:11px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutsideLeft{fill:#000;text-anchor:end;font-size:11px}#mermaid-svg-A2oOAHdwVVneTdX8 .task.clickable{cursor:pointer}#mermaid-svg-A2oOAHdwVVneTdX8 .taskText.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutsideLeft.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutsideRight.clickable{cursor:pointer;fill:#003163 !important;font-weight:bold}#mermaid-svg-A2oOAHdwVVneTdX8 .taskText0,#mermaid-svg-A2oOAHdwVVneTdX8 .taskText1,#mermaid-svg-A2oOAHdwVVneTdX8 .taskText2,#mermaid-svg-A2oOAHdwVVneTdX8 .taskText3{fill:#fff}#mermaid-svg-A2oOAHdwVVneTdX8 .task0,#mermaid-svg-A2oOAHdwVVneTdX8 .task1,#mermaid-svg-A2oOAHdwVVneTdX8 .task2,#mermaid-svg-A2oOAHdwVVneTdX8 .task3{fill:#8a90dd;stroke:#534fbc}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutside0,#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutside2{fill:#000}#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutside1,#mermaid-svg-A2oOAHdwVVneTdX8 .taskTextOutside3{fill:#000}#mermaid-svg-A2oOAHdwVVneTdX8 .active0,#mermaid-svg-A2oOAHdwVVneTdX8 .active1,#mermaid-svg-A2oOAHdwVVneTdX8 .active2,#mermaid-svg-A2oOAHdwVVneTdX8 .active3{fill:#bfc7ff;stroke:#534fbc}#mermaid-svg-A2oOAHdwVVneTdX8 .activeText0,#mermaid-svg-A2oOAHdwVVneTdX8 .activeText1,#mermaid-svg-A2oOAHdwVVneTdX8 .activeText2,#mermaid-svg-A2oOAHdwVVneTdX8 .activeText3{fill:#000 !important}#mermaid-svg-A2oOAHdwVVneTdX8 .done0,#mermaid-svg-A2oOAHdwVVneTdX8 .done1,#mermaid-svg-A2oOAHdwVVneTdX8 .done2,#mermaid-svg-A2oOAHdwVVneTdX8 .done3{stroke:grey;fill:#d3d3d3;stroke-width:2}#mermaid-svg-A2oOAHdwVVneTdX8 .doneText0,#mermaid-svg-A2oOAHdwVVneTdX8 .doneText1,#mermaid-svg-A2oOAHdwVVneTdX8 .doneText2,#mermaid-svg-A2oOAHdwVVneTdX8 .doneText3{fill:#000 !important}#mermaid-svg-A2oOAHdwVVneTdX8 .crit0,#mermaid-svg-A2oOAHdwVVneTdX8 .crit1,#mermaid-svg-A2oOAHdwVVneTdX8 .crit2,#mermaid-svg-A2oOAHdwVVneTdX8 .crit3{stroke:#f88;fill:red;stroke-width:2}#mermaid-svg-A2oOAHdwVVneTdX8 .activeCrit0,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCrit1,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCrit2,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCrit3{stroke:#f88;fill:#bfc7ff;stroke-width:2}#mermaid-svg-A2oOAHdwVVneTdX8 .doneCrit0,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCrit1,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCrit2,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCrit3{stroke:#f88;fill:#d3d3d3;stroke-width:2;cursor:pointer;shape-rendering:crispEdges}#mermaid-svg-A2oOAHdwVVneTdX8 .milestone{transform:rotate(45deg) scale(0.8, 0.8)}#mermaid-svg-A2oOAHdwVVneTdX8 .milestoneText{font-style:italic}#mermaid-svg-A2oOAHdwVVneTdX8 .doneCritText0,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCritText1,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCritText2,#mermaid-svg-A2oOAHdwVVneTdX8 .doneCritText3{fill:#000 !important}#mermaid-svg-A2oOAHdwVVneTdX8 .activeCritText0,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCritText1,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCritText2,#mermaid-svg-A2oOAHdwVVneTdX8 .activeCritText3{fill:#000 !important}#mermaid-svg-A2oOAHdwVVneTdX8 .titleText{text-anchor:middle;font-size:18px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 g.classGroup text{fill:#9370db;stroke:none;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);font-size:10px}#mermaid-svg-A2oOAHdwVVneTdX8 g.classGroup text .title{font-weight:bolder}#mermaid-svg-A2oOAHdwVVneTdX8 g.clickable{cursor:pointer}#mermaid-svg-A2oOAHdwVVneTdX8 g.classGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-A2oOAHdwVVneTdX8 g.classGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 .classLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.5}#mermaid-svg-A2oOAHdwVVneTdX8 .classLabel .label{fill:#9370db;font-size:10px}#mermaid-svg-A2oOAHdwVVneTdX8 .relation{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-A2oOAHdwVVneTdX8 .dashed-line{stroke-dasharray:3}#mermaid-svg-A2oOAHdwVVneTdX8 #compositionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #compositionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #aggregationStart{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #aggregationEnd{fill:#ECECFF;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #dependencyStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #dependencyEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #extensionStart{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 #extensionEnd{fill:#9370db;stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 .commit-id,#mermaid-svg-A2oOAHdwVVneTdX8 .commit-msg,#mermaid-svg-A2oOAHdwVVneTdX8 .branch-label{fill:lightgrey;color:lightgrey;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .slice{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 g.stateGroup text{fill:#9370db;stroke:none;font-size:10px;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 g.stateGroup text{fill:#9370db;fill:#333;stroke:none;font-size:10px}#mermaid-svg-A2oOAHdwVVneTdX8 g.statediagram-cluster .cluster-label text{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 g.stateGroup .state-title{font-weight:bolder;fill:#000}#mermaid-svg-A2oOAHdwVVneTdX8 g.stateGroup rect{fill:#ECECFF;stroke:#9370db}#mermaid-svg-A2oOAHdwVVneTdX8 g.stateGroup line{stroke:#9370db;stroke-width:1}#mermaid-svg-A2oOAHdwVVneTdX8 .transition{stroke:#9370db;stroke-width:1;fill:none}#mermaid-svg-A2oOAHdwVVneTdX8 .stateGroup .composit{fill:white;border-bottom:1px}#mermaid-svg-A2oOAHdwVVneTdX8 .stateGroup .alt-composit{fill:#e0e0e0;border-bottom:1px}#mermaid-svg-A2oOAHdwVVneTdX8 .state-note{stroke:#aa3;fill:#fff5ad}#mermaid-svg-A2oOAHdwVVneTdX8 .state-note text{fill:black;stroke:none;font-size:10px}#mermaid-svg-A2oOAHdwVVneTdX8 .stateLabel .box{stroke:none;stroke-width:0;fill:#ECECFF;opacity:0.7}#mermaid-svg-A2oOAHdwVVneTdX8 .edgeLabel text{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .stateLabel text{fill:#000;font-size:10px;font-weight:bold;font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family)}#mermaid-svg-A2oOAHdwVVneTdX8 .node circle.state-start{fill:black;stroke:black}#mermaid-svg-A2oOAHdwVVneTdX8 .node circle.state-end{fill:black;stroke:white;stroke-width:1.5}#mermaid-svg-A2oOAHdwVVneTdX8 #statediagram-barbEnd{fill:#9370db}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-cluster rect{fill:#ECECFF;stroke:#9370db;stroke-width:1px}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-cluster rect.outer{rx:5px;ry:5px}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-state .divider{stroke:#9370db}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-state .title-state{rx:5px;ry:5px}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-cluster.statediagram-cluster .inner{fill:white}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-cluster.statediagram-cluster-alt .inner{fill:#e0e0e0}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-cluster .inner{rx:0;ry:0}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-state rect.basic{rx:5px;ry:5px}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-state rect.divider{stroke-dasharray:10,10;fill:#efefef}#mermaid-svg-A2oOAHdwVVneTdX8 .note-edge{stroke-dasharray:5}#mermaid-svg-A2oOAHdwVVneTdX8 .statediagram-note rect{fill:#fff5ad;stroke:#aa3;stroke-width:1px;rx:0;ry:0}:root{--mermaid-font-family: '"trebuchet ms", verdana, arial';--mermaid-font-family: "Comic Sans MS", "Comic Sans", cursive}#mermaid-svg-A2oOAHdwVVneTdX8 .error-icon{fill:#522}#mermaid-svg-A2oOAHdwVVneTdX8 .error-text{fill:#522;stroke:#522}#mermaid-svg-A2oOAHdwVVneTdX8 .edge-thickness-normal{stroke-width:2px}#mermaid-svg-A2oOAHdwVVneTdX8 .edge-thickness-thick{stroke-width:3.5px}#mermaid-svg-A2oOAHdwVVneTdX8 .edge-pattern-solid{stroke-dasharray:0}#mermaid-svg-A2oOAHdwVVneTdX8 .edge-pattern-dashed{stroke-dasharray:3}#mermaid-svg-A2oOAHdwVVneTdX8 .edge-pattern-dotted{stroke-dasharray:2}#mermaid-svg-A2oOAHdwVVneTdX8 .marker{fill:#333}#mermaid-svg-A2oOAHdwVVneTdX8 .marker.cross{stroke:#333}:root { --mermaid-font-family: "trebuchet ms", verdana, arial;}#mermaid-svg-A2oOAHdwVVneTdX8 {color: rgba(0, 0, 0, 0.75);font: ;}
掃描模板目 錄
Contents背景介紹掃描多次圖片處理圖片參數檢測全部檢測結果檢測總結
?
§01 掃描模板
1.1 背景介紹
??這里的模板是仿真陰影圈的金屬模板,它具有標準的空洞,用于測試“陰影圈設備”的標準用具。
??掃描的設備使用了博文 Epson Perfection V370 Photo圖片掃描自動控制 中的Epson V370的自動掃描方式。
▲ 圖1.1.1 實驗臺上的掃描儀
▲ 圖1.1.2 掃描后的測試圖片
▲ 圖1.1.3 背景是白色的掃描圖片
1.2 掃描多次圖片
1.2.1 掃描程序
from headm
import *epson_title
= 'EPSON'
save_title
= '文件保存設置'
process_title
= '進程'def epsonScan():tspsendwindowkey
(epson_title
, "s", alt
=1,noreturn
=1)time
.sleep
(.1)if sum(tspgetwindowrect
(save_title
)) != 0:tspsendwindowkey
(save_title
, "\r", noreturn
=1)while True:time
.sleep
(1)if(sum(tspgetwindowrect
(process_title
)) != 0): breaktspbeep
(1800, 20)printf
('\a')while True:time
.sleep
(1)if(sum(tspgetwindowrect
(process_title
)) == 0): breaktspbeep
(1800, 20)printf
('\a')for i
in range(100):printf
("Scan %i/%d"%(i
, 100))epsonScan
()
1.2.2 掃描結果
掃描圖片結果:圖片尺寸:1275×1754
色彩:彩色圖片
數量:45
備注:每張圖有兩個金屬盤
▲ 圖 掃描多幅圖片進行處理
?
§02 處理圖片
??針對上面掃描目標圖片的特點,獲得其中兩個金屬陰影圈的主要參數。
2.1 參數檢測
2.1.1 圓環檢測
(1)陰影圈基礎幾何參數
??下面是直接在原圖片上對于金屬圓盤的直徑以及四個校園的直徑進行了標注。
▲ 圖2.1.1 圓環的基本像素直徑
(2)HoughCircles檢測
?Ⅰ.函數調用方法
circles
= cv2
.HoughCircles
(img
,cv2
.HOUGH_GRADIENT
, 1, 20, param1
=50, param2
=40, minRadius
=25, maxRadius
=0)
- img: 待檢測的灰度圖
- cv2.HOUGH_GRADIENT:檢測的方法,霍夫梯度
- 1:檢測的圓與原始圖像具有相同的大小,dp=2,檢測的圓是原始圖像的一半
- 20:檢測到的相鄰圓的中心的最小距離(如果參數太小,除了一個真實的圓外,還可能會錯誤地檢測到多個相鄰圓。如果太大,可能會漏掉一些圓。)
- aram1:在#HOUGH?u梯度的情況下,它是較高的. 兩個閾值傳遞到Canny邊緣檢測器(較低的一個小兩倍)。
- aram2:在#HOUGH?u梯度的情況下,它是檢測階段圓心的累加器閾值。它越小,就越可能檢測到假圓;
- inRadius:最小圓半徑
- axRadius:最大圓半徑,如果<=0,則使用最大圖像尺寸。如果<0,則返回沒有找到半徑的中心。
2.1.2 檢測結果
(1)檢測軟件
from headm
import *
import cv2picdir
= '/home/aistudio/work/Picture'
filedim
= sorted([s
for s
in os
.listdir
(picdir
) if s
.find
('.jpg') > 0])imgfile
= os
.path
.join
(picdir
, filedim
[0])
img
= cv2
.imread
(imgfile
)gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)imgout
= cv2
.Canny
(gray
, 50, 200, L2gradient
=True)
circles
= cv2
.HoughCircles
(gray
, cv2
.HOUGH_GRADIENT
, 1,50, param1
=230, param2
=40,minRadius
=40, maxRadius
=60)if len(circles
) > 0:for c
in circles
[0]:cv2
.circle
(img
,(c
[0],c
[1]), int(c
[-1]), (255,0,0), 6)plt
.clf
()
plt
.figure
(figsize
=(12,15))
plt
.imshow
(img
)
plt
.savefig
('/home/aistudio/stdout.jpg')
circles: [[[ 318.5 123.5 56.1][ 313.5 415.5 47. ][ 167.5 266.5 56.1][ 924.5 404.5 48.5][ 461.5 270.5 46.8][1044.5 137.5 56.1][ 850.5 207.5 48.1][1117.5 334.5 52.8]]]
▲ 圖2.1.2 檢測到的圓環
2.2 全部檢測結果
??將45張圖片結果進行檢測。
▲ 檢測所有的結果
gifpath
= '/home/aistudio/GIF'
if not os
.path
.isdir
(gifpath
):os
.makedirs
(gifpath
)
gifdim
= os
.listdir
(gifpath
)
for f
in gifdim
:fn
= os
.path
.join
(gifpath
, f
)if os
.path
.isfile
(fn
):os
.remove
(fn
)allcircles
= []
for i
,f
in tqdm
(enumerate(filedim
)):imgfile
= os
.path
.join
(picdir
, f
)img
= cv2
.imread
(imgfile
)gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)circles
= cv2
.HoughCircles
(gray
, cv2
.HOUGH_GRADIENT
, 1,50, param1
=220, param2
=30,minRadius
=40, maxRadius
=60)allcircles
.append
(circles
)img
[where
(img
<25)]=0if len(circles
) > 0:for c
in circles
[0]:cv2
.circle
(img
,(c
[0],c
[1]), int(c
[-1]), (255,0,0), 4)plt
.clf
()plt
.figure
(figsize
=(12,15))plt
.imshow
(img
)savefile
= os
.path
.join
(gifpath
, '%03d.jpg'%i
)plt
.savefig
(savefile
)
2.2.1 檢測結果統計
largedim
= []
littledim
= []for c
in allcircles
:for cc
in c
[0]:if cc
[-1] < 52: littledim
.append
(cc
[-1])else: largedim
.append
(cc
[-1])print("len(largedim): {}".format(len(largedim
)), "len(littledim): {}".format(len(littledim
)))
print("min(largedim): {}".format(min(largedim
)), "max(largedim): {}".format(max(largedim
)), "min(littledim): {}".format(min(littledim
)), "max(littledim): {}".format(max(littledim
)))
len(largedim): 179
len(littledim): 179min(largedim): 53.900001525878906
max(largedim): 58.29999923706055
min(littledim): 45.79999923706055
max(littledim): 50.5
▲ 圖2.2.2 檢測到的圓半徑分布
??修改param1=200,對應的檢測結果:
▲ 圖2.2.3 檢測到的圓半徑分布
▲ 圖2.2.4 檢測結果統計
▲ 圖2.2.5 檢測結果統計
?
※ 檢測總結 ※
??利用cv2中的HoughCircles算子,檢測陰影圈模板中的圈。通過實驗可以驗證算法的可行性。并看到,其中檢測算法中和Canny算子閾值相關的參數對于檢測結果分布有一定的影響。
處理程序
from headm
import *
import cv2
from tqdm
import tqdmpicdir
= '/home/aistudio/work/Picture'
filedim
= sorted([s
for s
in os
.listdir
(picdir
) if s
.find
('.jpg') > 0])
imgfile
= os
.path
.join
(picdir
, filedim
[0])
img
= cv2
.imread
(imgfile
)
gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)imgout
= cv2
.Canny
(gray
, 50, 200, L2gradient
=True)
circles
= cv2
.HoughCircles
(gray
, cv2
.HOUGH_GRADIENT
, 1,50, param1
=230, param2
=40,minRadius
=40, maxRadius
=60)
if len(circles
) > 0:for c
in circles
[0]:cv2
.circle
(img
,(c
[0],c
[1]), int(c
[-1]), (255,0,0), 6)plt
.clf
()
plt
.figure
(figsize
=(12,15))
plt
.imshow
(img
)
plt
.savefig
('/home/aistudio/stdout.jpg')gifpath
= '/home/aistudio/GIF'
if not os
.path
.isdir
(gifpath
):os
.makedirs
(gifpath
)
gifdim
= os
.listdir
(gifpath
)
for f
in gifdim
:fn
= os
.path
.join
(gifpath
, f
)if os
.path
.isfile
(fn
):os
.remove
(fn
)
allcircles
= []
for i
,f
in tqdm
(enumerate(filedim
)):imgfile
= os
.path
.join
(picdir
, f
)img
= cv2
.imread
(imgfile
)gray
= cv2
.cvtColor
(img
, cv2
.COLOR_BGR2GRAY
)circles
= cv2
.HoughCircles
(gray
, cv2
.HOUGH_GRADIENT
, 1,50, param1
=180, param2
=30,minRadius
=40, maxRadius
=60)allcircles
.append
(circles
)
largedim
= []
littledim
= []for c
in allcircles
:for cc
in c
[0]:if cc
[-1] < 52: littledim
.append
(cc
[-1])else: largedim
.append
(cc
[-1])printt
(len(largedim
):, len(littledim
):)
printt
(min(largedim
):, max(largedim
):, min(littledim
):, max(littledim
):)
plt
.clf
()
plt
.figure
(figsize
=(10,6))
plt
.hist
(largedim
)
plt
.hist
(littledim
)
plt
.grid
('on')plt
.savefig
('/home/aistudio/stdout.jpg')
■ 相關文獻鏈接:
- Epson Perfection V370 Photo圖片掃描自動控制
● 相關圖表鏈接:
- 圖 掃描過程
- 圖1.1.1 實驗臺上的掃描儀
- 圖1.1.2 掃描后的測試圖片
- 圖1.1.3 背景是白色的掃描圖片
- 圖 掃描多幅圖片進行處理
- 圖2.1.1 圓環的基本像素直徑
- 圖2.1.2 檢測到的圓環
- 圖2.2.2 檢測到的圓半徑分布
- 圖2.2.3 檢測到的圓半徑分布
- 圖2.2.4 檢測結果統計
- 圖2.2.5 檢測結果統計
總結
以上是生活随笔為你收集整理的扫描标准阴影圈模板的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。