国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)

這篇具有很好參考價值的文章主要介紹了工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

基于opencv的工件缺陷檢測C++和python實現(xiàn)

作為研究生,每一個項目都很重要,這里給大家分享一個好入門項目,代碼純自己寫,網(wǎng)上都是python的,但是有些企業(yè)要求C++編寫項目,所以希望大家能學到東西。
一. 問題陳述
工件的展示,這是一個視頻,然后工件一個個經(jīng)過,要檢測出哪個工件有缺陷,并且分類缺陷的種類??梢钥吹饺毕菔遣恢挂环N。
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
二. 代碼步驟
1.讀取圖像,轉(zhuǎn)為灰度圖并二值化

cvtColor(img, gray, COLOR_BGR2GRAY);
threshold(gray, thresh, 127, 255, THRESH_TOZERO_INV);、

2.尋找輪廓

std::vector<Vec4i> hireachy;
std::vector<std::vector<Point>> contours;
findContours(thresh, contours, hireachy, RETR_LIST, CHAIN_APPROX_NONE);

3.遍歷輪廓,對工件圈進行統(tǒng)計,防止重復標記
原理是計算圖像矩,可以確定圖像的灰度中心,根據(jù)每個時刻每個工件的中心位置的變換,可以判斷畫面里是否出現(xiàn)新的工件。同時,也要記得更新每個時刻每個工件的位置。具體代碼實現(xiàn)可以參考完整工程文件。這里貼出部分:

for (size_t cnt = 0; cnt < contours.size(); cnt++)
        {
            double area = contourArea(contours[cnt]); //求輪廓面積(大約的)
            if (area > 18000 & area < 28000)          //把工件圈出來
            {
                mu[cnt] = moments(contours[cnt], false); //計算圖像矩,表示工件的位置
                //計算圖像質(zhì)心位置
                double cx = mu[cnt].m10 / mu[cnt].m00;
                double cy = mu[cnt].m01 / mu[cnt].m00;
                boundRect[cnt] = boundingRect(Mat(contours[cnt])); //計算外接矩形

                new_object = true;
                //通過質(zhì)心位置判斷視頻出現(xiàn)的工件是否是最新的
                if (cx > 100) //工件要全部出現(xiàn)
                {
                    if (products.size() > 0) //判斷出現(xiàn)的工件是不是新的
                    {
                        for (size_t i = 0; i < products.size(); i++)
                        {
                            //存在一個
                            if (fabs(cx - products[i].getX()) <= 35 && fabs(cy - products[i].getY()) <= 35)
                            {
                                new_object = false;
                                //更新位置參數(shù)
                                products[i].updateCoords(cx, cy, boundRect[cnt].x, boundRect[cnt].y, boundRect[cnt].width, boundRect[cnt].height);
                            }
                        }
                    }
                    if (new_object == true)
                    {
                        Product p(pid, cx, cy, boundRect[cnt].x, boundRect[cnt].y, boundRect[cnt].width, boundRect[cnt].height);
                        p.save_pic(img);
                        products.emplace_back(p);
                        p.count = pid;
                        defects = p.defect_detect(); //缺陷檢測
                        pid += 1;
                    }
                }
                //圈出來
                rectangle(img, boundRect[cnt].tl(), boundRect[cnt].br(), Scalar(0, 0, 255), 2, 8, 0);
            }
        }

效果是這樣:
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)

4.遍歷輪廓,把工件圈出來,順便保存調(diào)試,如下圖。圈出來的原理也不難,其實就是通過函數(shù)

boundRect[cnt] = boundingRect(Mat(contours[cnt])); 

計算外接矩形,就可以獲得矩形的左上角和右下角坐標,就可以畫了。效果如下:
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)

5.對每個框進行缺陷提取,原理依然是輪廓檢測加面積判斷。效果如下:
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
6.缺陷類型判斷,這里利用直方圖統(tǒng)計。即統(tǒng)計0-255中每個像素的個數(shù),根據(jù)個數(shù),轉(zhuǎn)為百分比,接著我們設(shè)定一個閾值,就可以判斷出缺陷類型。部分代碼:

          //------------------------直方圖計算
            Mat hist;
            //設(shè)定像素取值范圍
            int histSize = 256;
            float range[] = {0, 256};
            const float *histRanges = {range};
            // hist索引為像素,值為像素點的個數(shù)
            calcHist(&resul, 1, 0, Mat(), hist, 1, &histSize, &histRanges, true, false);
            //-------------------------判斷缺陷
            float sum = 0;
            for (int i = 0; i < 256; i++)
            {
                float bin_val = hist.at<float>(i); //遍歷hist元素(注意hist中是float類型)
                sum = sum + bin_val;               //計算總的個數(shù)
            }
            // std::cout << "sum:"
            //           << sum << "\n";
            //計算各個像素點的個數(shù)百分比
            for (int i = 0; i < 256; i++)
            {
                if (hist.at<float>(i) > 0) //像素點個數(shù)大于0的時候
                {
                    hist.at<float>(i) = hist.at<float>(i) / sum;
                }
                // std::cout << "hist:"
                //           << hist.at<float>(i) << "\n";
            }
            float hist_sum_scratch = 0;
            float hist_sum_blot = 0;
            for (int i = 90; i < 135; i++) //比較灰的
            {
                hist_sum_scratch = hist_sum_scratch + hist.at<float>(i);
            }
            std::cout << "hist_sum_scratch:"
                      << hist_sum_scratch << "\n";
            for (int i = 15; i < 90; i++) //比較黑的
            {
                hist_sum_blot = hist_sum_blot + hist.at<float>(i);
            }
            std::cout << "hist_sum_blot:"
                      << hist_sum_blot << "\n";
            if (hist_sum_scratch >= hist_sum_blot)
            {
                Defect d(1, boundRect[cnt].x, boundRect[cnt].y, boundRect[cnt].width, boundRect[cnt].height);
                Result.emplace_back(d);
                state = 1;
                std::cout << "此處缺陷劃痕"
                          << "\n";
            }
            if (hist_sum_scratch < hist_sum_blot)
            {
                Defect d(2, boundRect[cnt].x, boundRect[cnt].y, boundRect[cnt].width, boundRect[cnt].height);
                Result.emplace_back(d);
                state = 2;
                std::cout << "此處缺陷污漬"
                          << "\n";
            }

到此就可以完成啦!!!
三. 最終效果:
工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)
可以看到,會在終端打印相關(guān)消息

C++代碼純自己寫,有多文件,花了一些時間總結(jié),大家可以私信我拿代碼
另外,也準備了python代碼,需要的也可以私信我。

因為花費不少時間,所以希望大家給點報酬支持一下,繼續(xù)加油進入下一個實戰(zhàn)項目分享。

------------------------------------補充內(nèi)容---------------------------------

由于很多小伙伴下載代碼之后不知道怎么使用這代碼,今天就補充一下。首先,我們需要安裝opencv與dlib,參考下我的另外一篇文章:
ubuntu20+dlib19.22+0pencv4.5.0的機器視覺算法之路(一).
1.刪除buiild文件夾里面的所有文件
2.路徑打開到build, 執(zhí)行

cmake ..

3.接著

make

4.執(zhí)行

./result

搞定,完結(jié),歡迎大家來學習,當作自己的一個項目,或者可以進一步去擴展成其他東西,懂的都懂。文章來源地址http://www.zghlxwxcb.cn/news/detail-443658.html

到了這里,關(guān)于工業(yè)缺陷檢測項目實戰(zhàn)(一)——基于opencv的工件缺陷檢測C++和python實現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

  • OpenCV | 告別人工目檢:深度學習技術(shù)引領(lǐng)工業(yè)品缺陷檢測新時代

    OpenCV | 告別人工目檢:深度學習技術(shù)引領(lǐng)工業(yè)品缺陷檢測新時代

    機器視覺是使用各種工業(yè)相機,結(jié)合傳感器跟電氣信號實現(xiàn)替代傳統(tǒng)人工,完成對象識別、計數(shù)、測量、缺陷檢測、引導定位與抓取等任務。其中工業(yè)品的缺陷檢測極大的依賴人工完成,特別是傳統(tǒng)的3C制造環(huán)節(jié),產(chǎn)品缺陷檢測依賴于人眼睛來發(fā)現(xiàn)與檢測,不僅費時費力還面

    2024年02月04日
    瀏覽(21)
  • opencv 六 缺陷檢測實戰(zhàn)2(PCB缺陷檢測——小面積缺陷)

    opencv 六 缺陷檢測實戰(zhàn)2(PCB缺陷檢測——小面積缺陷)

    對PCB進行缺陷檢測,具體缺陷類型有開路(斷路)、短路、缺口、毛刺。 上圖為灰度圖,黑色部分為電路板路線,其存在缺口、斷路、毛刺、短路等缺陷。這些缺陷有的屬于白色缺陷,有的屬于黑色缺陷,但都屬于小面積缺陷。故,可以使用opencv中的形態(tài)學算法,如:腐蝕、

    2024年02月02日
    瀏覽(21)
  • 基于半監(jiān)督算法的工業(yè)圖像缺陷檢測方法:MemSeg

    基于半監(jiān)督算法的工業(yè)圖像缺陷檢測方法:MemSeg

    來源:投稿 作者:橡皮 編輯:學姐 論文:https://arxiv.org/ftp/arxiv/papers/2205/2205.00908.pdf 代碼:https://github.com/TooTouch/MemSeg 提出了一個精心設(shè)計的異常模擬策略,用于模型的自監(jiān)督學習,該策略整合了目標前景、紋理和結(jié)構(gòu)異常三個方面。 提出了具有更高效的特征匹配算法的記憶

    2024年02月16日
    瀏覽(18)
  • 基于計算機視覺的工業(yè)金屬表面缺陷檢測綜述

    基于計算機視覺的工業(yè)金屬表面缺陷檢測綜述

    基于計算機視覺的工業(yè)金屬表面缺陷檢測綜述 (aas.net.cn) 計算機視覺檢測技術(shù)(Automated optical inspection, AOI)[2]是一種以計算機視覺為基礎(chǔ), 通過自動光學系統(tǒng)獲取檢測目標圖像, 運用算法進行分析決策, 判斷目標是否符合檢測規(guī)范的非接觸式檢測方法. 表面缺陷檢測系統(tǒng)的基本原理

    2024年04月15日
    瀏覽(26)
  • 基于輕量化深度學習網(wǎng)絡(luò)的工業(yè)環(huán)境小目標缺陷檢測

    基于輕量化深度學習網(wǎng)絡(luò)的工業(yè)環(huán)境小目標缺陷檢測

    源自:控制與決策 作者:葉卓勛???劉妹琴??張森林 工業(yè)環(huán)境下表面缺陷檢測是質(zhì)量管理的重要一環(huán), 具有重要的研究價值.通用檢測網(wǎng)絡(luò)(如YOLOv4)已被證實在多種數(shù)據(jù)集檢測方面是有效的, 但是在工業(yè)環(huán)境的缺陷檢測仍需要解決兩個問題: 一是缺陷實例在表面占比過小, 屬于

    2024年02月03日
    瀏覽(39)
  • Yolov8工業(yè)缺陷檢測:基于鋁片表面的缺陷檢測算法,VanillaBlock和MobileViTAttention助力檢測,實現(xiàn)暴力漲點 |2023最新成果,創(chuàng)新度很強

    Yolov8工業(yè)缺陷檢測:基于鋁片表面的缺陷檢測算法,VanillaBlock和MobileViTAttention助力檢測,實現(xiàn)暴力漲點 |2023最新成果,創(chuàng)新度很強

    目錄 1.工件缺陷數(shù)據(jù)集介紹 ?1.2數(shù)據(jù)集劃分通過split_train_val.py得到trainval.txt、val.txt、test.txt?? ?1.2 通過voc_label.py得到適合yolov8訓練需要的 2.訓練結(jié)果對比 ?2.1?華為諾亞2023極簡的神經(jīng)網(wǎng)絡(luò)模型 VanillaNet---VanillaBlock助力檢測,實現(xiàn)暴力漲點 ?2.2?MobileViTAttention助力小目標檢測

    2024年02月13日
    瀏覽(24)
  • opencv 案例05-基于二值圖像分析(簡單缺陷檢測)

    opencv 案例05-基于二值圖像分析(簡單缺陷檢測)

    缺陷檢測,分為兩個部分,一個部分是提取指定的輪廓,第二個部分通過對比實現(xiàn)劃痕檢測與缺角檢測。本次主要搞定第一部分,學會觀察圖像與提取圖像ROI對象輪廓外接矩形與輪廓。 下面是基于二值圖像分析的大致流程 讀取圖像 將圖像轉(zhuǎn)換為灰度圖,并對其進行二值化處

    2024年02月10日
    瀏覽(23)
  • OpenCV 項目開發(fā)實戰(zhàn)--對圖像中的斑點進行檢測(Python、C++代碼實現(xiàn))

    OpenCV 項目開發(fā)實戰(zhàn)--對圖像中的斑點進行檢測(Python、C++代碼實現(xiàn))

    Blob 是圖像中一組連接的像素,它們共享一些共同的屬性(例如,灰度值)。在上圖中,暗連接區(qū)域是斑點,斑點檢測旨在識別和標記這些區(qū)域。 文末附相關(guān)測試代碼的下載鏈接 OpenCV 提供了一種基于不同特征檢測和過濾斑點的便捷方法。讓我們從最簡單的例子開始 Python

    2024年02月14日
    瀏覽(25)
  • YOLOV5應用實戰(zhàn)項目:鋼材表面缺陷檢測(數(shù)據(jù)集:NEU-CLS)筆記

    YOLOV5應用實戰(zhàn)項目:鋼材表面缺陷檢測(數(shù)據(jù)集:NEU-CLS)筆記

    本文記錄的是YOLOV5的實戰(zhàn)筆記,是一個用yolov5檢測鋼材表面缺陷的實戰(zhàn)案例。 主要分為以下幾個步驟: 1. 將原始標簽xml文件數(shù)據(jù)處理成yolo要求的txt格式;(Labels標簽數(shù)據(jù)已按照yolo要求的txt格式處理完成,數(shù)據(jù)集見文中下載方式) 2. 進行yolo模型的文件配置 3. 訓練yolo模型

    2024年02月04日
    瀏覽(24)
  • Baumer工業(yè)相機堡盟工業(yè)相機如何聯(lián)合NEOAPI SDK和OpenCV實現(xiàn)獲取圖像并對圖像進行邊緣檢測(C++)

    ? Baumer工業(yè)相機堡盟相機是一種高性能、高質(zhì)量的工業(yè)相機,可用于各種應用場景,如物體檢測、計數(shù)和識別、運動分析和圖像處理。 Baumer的萬兆網(wǎng)相機擁有出色的圖像處理性能,可以實時傳輸高分辨率圖像。此外,該相機還具有快速數(shù)據(jù)傳輸、低功耗、易于集成以及高度

    2024年01月19日
    瀏覽(32)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包