日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

扫描标准阴影圈模板

發布時間:2024/8/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 扫描标准阴影圈模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

▲ 圖 掃描過程

簡 介: 利用cv2中的HoughCircles算子,檢測陰影圈模板中的圈。通過實驗可以驗證算法的可行性。并看到,其中檢測算法中和Canny算子閾值相關的參數對于檢測結果分布有一定的影響。

關鍵詞 CannyHoughCirclescv2陰影圈

#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 檢測到的圓半徑分布

  • 檢測參數:param1=150

    len(largedim): 180
    len(littledim): 180

    min(largedim): 54.599998474121094
    max(largedim): 59.400001525878906
    min(littledim): 45.70000076293945
    max(littledim): 49.400001525878906

▲ 圖2.2.4 檢測結果統計

  • param1=100

▲ 圖2.2.5 檢測結果統計

?

測總結 ※


??用cv2中的HoughCircles算子,檢測陰影圈模板中的圈。通過實驗可以驗證算法的可行性。并看到,其中檢測算法中和Canny算子閾值相關的參數對于檢測結果分布有一定的影響。

處理程序

#!/usr/local/bin/python # -*- coding: gbk -*- #============================================================ # EXEC1.PY -- by Dr. ZhuoQing 2022-01-22 # # Note: #============================================================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]) #printt(filedim:, len(filedim):)#------------------------------------------------------------ imgfile = os.path.join(picdir, filedim[0]) img = cv2.imread(imgfile) #printt(img.shape)#------------------------------------------------------------ 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) #printt(circles:)#------------------------------------------------------------ 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)# img[where(img<25)]=0# if 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)#------------------------------------------------------------ #printt(allcircles) 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')#--------------------------)---------------------------------- # END OF FILE : EXEC1.PY #============================================================


■ 相關文獻鏈接:

  • 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 檢測結果統計

總結

以上是生活随笔為你收集整理的扫描标准阴影圈模板的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。