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

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》

這篇具有很好參考價(jià)值的文章主要介紹了OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。


前言

本案例將使用OpenCV C++ 進(jìn)行PCB印刷缺陷檢測。目前缺陷檢測算法可分為兩大類:
一:基于模板匹配的缺陷檢測
二:基于深度學(xué)習(xí)的缺陷檢測,主要利用目標(biāo)檢測去識別缺陷部分。
本文算法主要是基于模板匹配算法進(jìn)行缺陷檢測,參考《基于差異模型的印刷標(biāo)簽缺陷檢測算法》一文,進(jìn)行算法復(fù)現(xiàn),感興趣的朋友可以去閱讀一下原文。
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

一、結(jié)果演示

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

二、缺陷檢測算法

2.1、多元模板圖像

通過工業(yè)相機(jī)采集合格標(biāo)簽圖像,作為差異模型的訓(xùn)練數(shù) 據(jù)集,選擇其中一張合格標(biāo)簽圖像分別進(jìn)行高斯平滑、灰度腐蝕 和灰度膨脹操作,獲取多元模板圖像,用于訓(xùn)練差異模型。
將合格圖像f(x,y)與高斯核濾波器卷積,得到高斯平滑圖像f1(x,y)。 構(gòu)建一個(gè)11×11大小的矩形結(jié)構(gòu)元素,對合格標(biāo)簽圖像進(jìn) 行灰度腐蝕運(yùn)算,得到灰度腐蝕圖像f2(x,y)。再構(gòu)建一個(gè)13×13 大小的矩形結(jié)構(gòu)元素,對合格標(biāo)簽圖像進(jìn)行灰度膨脹運(yùn)算[3],得到灰度膨脹圖像f3(x,y)。

2.2、訓(xùn)練差異模型

將多元模板圖像f1(x,y)、f 2(x,y)與f 3(x,y)作為訓(xùn)練數(shù)據(jù)集 對差異模型進(jìn)行訓(xùn)練。對所有圖像同一坐標(biāo)的像素點(diǎn)計(jì)算平均 值與標(biāo)準(zhǔn)差[4],得到均值圖像F(x,y):
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

標(biāo)準(zhǔn)差圖像V(x,y):
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

本文中,F(xiàn)(x,y)、V(x,y)即為差異模型訓(xùn)練過程中的標(biāo)準(zhǔn)圖 像與差異圖像。

為了使理想的差異模型適應(yīng)正常的工藝誤差范圍,加入相對閾值VarThreshold=[b u,b l]參數(shù)。 其中,b u為上限相對閾 值,bl為下限相對閾值。如圖2所示。則兩幅閾值圖像T u,l(x,y) 計(jì)算如下:
亮閾值圖像:Tu(x,y)=F(x,y)+ bu* V(x,y)
暗閾值圖像:Tl(x,y)=F(x,y)- bl* V(x,y)

將配準(zhǔn)對其后的待測圖像c(x,y)與差異模型的閾值圖像 Tu, l(x,y)進(jìn)行像素點(diǎn)之間的灰度值對比,當(dāng)滿足如下條件時(shí),即為檢測到的缺陷區(qū)域。
c(x,y)>Tu(x,y)∨c(x,y)<T l (x,y)

三、圖像配準(zhǔn)

如圖為模板圖像
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

如圖為待檢測圖像,我們需要將待檢測圖像與模板圖像進(jìn)行圖像配準(zhǔn)。在這里我使用的是基于圖像仿射變換進(jìn)行兩幅圖像的矯正。關(guān)于圖像矯正這塊就不細(xì)說了,可以參考一下我的這篇博文OpenCV C++案例實(shí)戰(zhàn)四《圖像透視矯正》。這里直接上代碼
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

3.1 功能源碼

//圖像定位矯正
bool ImageLocal(cv::Mat srcImg, cv::Mat& warpImg, Point2f SrcAffinePts[])
{
	Mat grayImg;
	if (srcImg.channels() != 1)
	{
		cvtColor(srcImg, grayImg, COLOR_BGR2GRAY);
	}
	else
	{
		grayImg = srcImg.clone();
	}

	Mat blurImg;
	medianBlur(grayImg, blurImg, 5);

	Mat binImg;
	threshold(blurImg, binImg, 10, 255, THRESH_BINARY);
	//namedWindow("binImg", WINDOW_NORMAL);
	//imshow("binImg", binImg);

	vector<vector<Point>>contours;
	findContours(binImg, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
	RotatedRect bRect;
	for (int cnt = 0; cnt < contours.size(); cnt++)
	{
		double area = contourArea(contours[cnt]);
		if (area > 1000)
		{
			bRect = minAreaRect(contours[cnt]);
		}
	}

	if (bRect.size.empty())return false;//如果沒有找到最小外接矩形,返回false

	//找到最小外接矩形四個(gè)頂點(diǎn)
	Point2f srcPoints[4];
	bRect.points(srcPoints);
	//for (int i = 0; i < 4; i++)
	//{
	//	line(srcImg, srcPoints[i], srcPoints[(i + 1) % 4], Scalar(0, 255, 0), 3);
	//}

	//將四個(gè)點(diǎn)按照左上、右上、右下、左下進(jìn)行區(qū)分
	int TL, TR, BR, BL;
	double addmax = 0.0, addmin = 999.9, submax = 0.0, submin = 999.9;
	for (int i = 0; i < 4; i++)
	{
		double addval = srcPoints[i].x + srcPoints[i].y;
		double subval = srcPoints[i].x - srcPoints[i].y;
		if (addval > addmax)
		{
			addmax = addval;
			BR = i;
		}
		if (addval < addmin)
		{
			addmin = addval;
			TL = i;
		}
		if (subval > submax)
		{
			submax = subval;
			TR = i;
		}
		if (subval < submin)
		{
			submin = subval;
			BL = i;
		}
	}

	double LeftHeight = EuDis(srcPoints[TL], srcPoints[BL]);
	double RightHeight = EuDis(srcPoints[TR], srcPoints[BR]);
	double MaxHeight = max(LeftHeight, RightHeight);

	double UpWidth = EuDis(srcPoints[TL], srcPoints[TR]);
	double DownWidth = EuDis(srcPoints[BL], srcPoints[BR]);
	double MaxWidth = max(UpWidth, DownWidth);

	//這里使用的順序是左上、右上、右下、左下順時(shí)針順序。SrcAffinePts、DstAffinePts要一一對應(yīng)
	SrcAffinePts[0] = Point2f(srcPoints[TL]);
	SrcAffinePts[1] = Point2f(srcPoints[TR]);
	SrcAffinePts[2] = Point2f(srcPoints[BR]);
	SrcAffinePts[3] = Point2f(srcPoints[BL]);
	Point2f DstAffinePts[4] = { Point2f(0,0),Point2f(MaxWidth,0),Point2f(MaxWidth,MaxHeight),Point2f(0,MaxHeight) };

	Mat M = getPerspectiveTransform(SrcAffinePts, DstAffinePts);

	warpPerspective(srcImg, warpImg, M, Size(MaxWidth, MaxHeight), 1, 0, Scalar::all(0));

	return true;
}

3.1 功能效果

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

四、多元模板圖像

關(guān)于如何計(jì)算均值圖像、差異圖像、以及亮、暗閾值圖像在下面源碼中以復(fù)現(xiàn),具體請閱讀源碼。

4.1 功能源碼

//計(jì)算均值圖像
void meanImage(cv::Mat gaussianImg, cv::Mat erodeImg, cv::Mat dilateImg, cv::Mat& meanImg)
{
	meanImg = Mat::zeros(gaussianImg.size(), CV_8U);
	for (int i = 0; i < gaussianImg.rows; i++)
	{
		uchar* gData = gaussianImg.ptr<uchar>(i);
		uchar* eData = erodeImg.ptr<uchar>(i);
		uchar* dData = dilateImg.ptr<uchar>(i);
		uchar* mData = meanImg.ptr<uchar>(i);

		for (int j = 0; j < gaussianImg.cols; j++)
		{
			mData[j] = (gData[j] + eData[j] + dData[j]) / 3;
		}
	}
}


//計(jì)算差異圖像
void diffImage(cv::Mat gaussianImg, cv::Mat erodeImg, cv::Mat dilateImg, cv::Mat meanImg, cv::Mat& diffImg)
{
	diffImg = Mat::zeros(gaussianImg.size(), CV_8U);
	for (int i = 0; i < gaussianImg.rows; i++)
	{
		uchar* gData = gaussianImg.ptr<uchar>(i);
		uchar* eData = erodeImg.ptr<uchar>(i);
		uchar* dData = dilateImg.ptr<uchar>(i);
		uchar* mData = meanImg.ptr<uchar>(i);
		uchar* Data = diffImg.ptr<uchar>(i);

		for (int j = 0; j < gaussianImg.cols; j++)
		{
			Data[j] = sqrt(powf((gData[j] - mData[j]), 2) + powf((eData[j] - mData[j]), 2) + powf((dData[j] - mData[j]), 2) / 3.0);
		}
	}
}


//計(jì)算亮、暗閾值圖像
void threshImg(cv::Mat meanImg, cv::Mat diffImg,cv::Mat &LightImg,cv::Mat& DarkImg)
{
	double bu = 1.2;
	double bl = 0.8;

	Mat mul_bu, mul_bl;
	multiply(diffImg, bu, mul_bu);
	multiply(diffImg, bl, mul_bl);

	LightImg = Mat::zeros(meanImg.size(), CV_8U);
	DarkImg = Mat::zeros(meanImg.size(), CV_8U);

	for (int i = 0; i < meanImg.rows; i++)
	{
		uchar* mData = meanImg.ptr<uchar>(i);
		uchar* dData = diffImg.ptr<uchar>(i);
		uchar* lData = LightImg.ptr<uchar>(i);
		uchar* DData = DarkImg.ptr<uchar>(i);
		uchar* buData = mul_bu.ptr<uchar>(i);
		uchar* blData = mul_bl.ptr<uchar>(i);

		for (int j = 0; j < meanImg.cols; j++)
		{
			lData[j] = saturate_cast<uchar>(mData[j] + buData[j]);
			DData[j] = saturate_cast<uchar>(mData[j] - blData[j]);
		}
	}
}

如下圖為亮閾值圖像。
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

如下圖為暗閾值圖像。
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

五、缺陷檢測

以上,我們計(jì)算出來了模板的亮、暗閾值圖像,主要就是通過與這兩幅圖像的灰度值進(jìn)行對比,進(jìn)而確定缺陷部分。
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能
如圖為:將配準(zhǔn)對其后的待測圖像c(x,y)與差異模型的閾值圖像 Tu, l(x,y)進(jìn)行像素點(diǎn)之間的灰度值對比,當(dāng)滿足如下條件時(shí),即為檢測到的缺陷區(qū)域。
c(x,y)>Tu(x,y)∨c(x,y)<T l (x,y)

由于此時(shí)提取到的缺陷部分是基于仿射矯正后的,故如果需要在原圖上顯示結(jié)果的話,還需要將檢測結(jié)果進(jìn)行反變換回去。具體請閱讀源碼。

5.1 功能源碼

//缺陷檢測
void DetectImg(cv::Mat warpImg,cv::Mat LightImg, cv::Mat DarkImg, Point2f SrcAffinePts[],cv::Mat decImg, cv::Mat& showImg)
{
	int th = 10;//容差閾值

	Mat resImg = Mat::zeros(warpImg.size(), CV_8U);
	for (int i = 0; i < warpImg.rows; i++)
	{
		uchar* sData = warpImg.ptr<uchar>(i);
		uchar* lData = LightImg.ptr<uchar>(i);
		uchar* dData = DarkImg.ptr<uchar>(i);
		uchar* rData = resImg.ptr<uchar>(i);

		for (int j = 0; j < warpImg.cols; j++)
		{
			//識別缺陷
			if ((sData[j]-th) > lData[j]||(sData[j]+th) < dData[j])
			{
				rData[j] = 255;
			}
		}
	}

	Mat kernel = getStructuringElement(MORPH_RECT, Size(3, 3));
	morphologyEx(resImg, resImg, MORPH_OPEN, kernel);

	kernel = getStructuringElement(MORPH_RECT, Size(7, 7));
	dilate(resImg, resImg, kernel);

	//namedWindow("resImg", WINDOW_NORMAL);
	//imshow("resImg", resImg);

	//繪制缺陷結(jié)果
	vector<vector<Point>>contours;
	findContours(resImg, contours, RETR_LIST, CHAIN_APPROX_SIMPLE);
	for (int t = 0; t < contours.size(); t++)
	{
		if (contourArea(contours[t]) > 50)
		{
			Rect rect = boundingRect(contours[t]);
			rectangle(showImg, rect, Scalar(0, 0, 255), 2);
		}
	}

	//將結(jié)果反變換回原圖像
	Point2f DstAffinePts[4] = { Point2f(0,0),Point2f(decImg.cols,0),Point2f(decImg.cols,decImg.rows),Point2f(0,decImg.rows) };

	Mat M = getPerspectiveTransform( DstAffinePts, SrcAffinePts);

	warpPerspective(showImg, showImg, M, decImg.size(), 1, 0, Scalar::all(0));
}

六、效果演示

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能
OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能
如上圖效果所示,與模板圖像對比,基本上將待測圖像里的缺陷全部檢測,而且誤檢情況很少。上應(yīng)用到不同物體檢測時(shí),需要根據(jù)自己的圖像數(shù)據(jù)進(jìn)行稍小的調(diào)參。在這里只是給大家提供一個(gè)算法思路,歡迎大家進(jìn)行交流學(xué)習(xí)?。?!

OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》,OpenCV C++項(xiàng)目實(shí)戰(zhàn),opencv,c++,人工智能
已經(jīng)開通微信公眾號啦!歡迎大家關(guān)注呀!公眾號會不定期更新OpenCV系列文章以及相關(guān)源代碼資料等!歡迎大家關(guān)注交流學(xué)習(xí)!


總結(jié)

本文使用OpenCV C++ 進(jìn)行PCB印刷缺陷檢測,主要操作有以下幾點(diǎn)。
1、將圖像進(jìn)行仿射變換,與模板圖像進(jìn)行配準(zhǔn)
2、計(jì)算差異圖像,得到基于模板的亮、暗閾值圖像
3、將待檢測圖像與亮、暗閾值圖像逐像素比較,設(shè)定閾值,超出閾值部分的即為缺陷文章來源地址http://www.zghlxwxcb.cn/news/detail-718893.html

到了這里,關(guān)于OpenCV C++案例實(shí)戰(zhàn)三十三《缺陷檢測》的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

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

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

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

    2024年02月10日
    瀏覽(23)
  • MATLAB算法實(shí)戰(zhàn)應(yīng)用案例精講-【圖像處理】缺陷檢測(附python和matlab實(shí)現(xiàn)代碼)

    目錄 前言 算法原理 什么是缺陷檢測 缺陷檢測任務(wù) 缺陷檢測的關(guān)鍵問題

    2023年04月17日
    瀏覽(97)
  • OpenCV 項(xiàng)目開發(fā)實(shí)戰(zhàn)--對圖像中的斑點(diǎn)進(jìn)行檢測(Python、C++代碼實(shí)現(xiàn))

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

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

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

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

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

    2024年02月04日
    瀏覽(24)
  • Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之四 簡單行人人體檢測效果

    Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之四 簡單行人人體檢測效果

    目錄 Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之四 簡單行人人體檢測效果 一、簡單介紹 二、簡單行人人體檢測效果實(shí)現(xiàn)原理 三、簡單行人人體檢測效果案例實(shí)現(xiàn)簡單步驟 四、注意事項(xiàng) Python是一種跨平臺的計(jì)算機(jī)程序設(shè)計(jì)語言。是一種面向?qū)?/p>

    2024年04月26日
    瀏覽(103)
  • OpenCV(三十三):計(jì)算輪廓面積與輪廓長度

    OpenCV(三十三):計(jì)算輪廓面積與輪廓長度

    1.介紹輪廓面積與輪廓長度 ? ? ? ?輪廓面積(Contour Area)是指輪廓所包圍的區(qū)域的總面積。通常情況下,輪廓面積的單位是像素的平方。 ? ? ? ? 輪廓長度(Contour Length)又稱周長(Perimeter),表示輪廓的閉合邊界的長度。輪廓的邊界可以看作是由一系列相鄰像素點(diǎn)組成的

    2024年02月09日
    瀏覽(29)
  • 基于OpenCV的高壓電力檢測項(xiàng)目案例

    基于OpenCV的高壓電力檢測項(xiàng)目案例

    ????????隨著高壓電力設(shè)施的日益增多,傳統(tǒng)的巡檢方式已無法滿足現(xiàn)代電力系統(tǒng)的需求。為此,我們決定利用計(jì)算機(jī)視覺技術(shù),特別是 OpenCV庫 ,開發(fā)一個(gè)高壓電力檢測系統(tǒng)。目標(biāo)是實(shí)現(xiàn)自動(dòng)化、高精度的電力設(shè)備檢測,提高巡檢效率,降低人工成本 本項(xiàng)目主要包括以下

    2024年02月22日
    瀏覽(22)
  • opencv缺陷檢測

    opencv缺陷檢測

    用傳統(tǒng)算法,根據(jù)實(shí)際工程項(xiàng)目,手把手教你做一個(gè)最典型的產(chǎn)品缺陷檢測項(xiàng)目案例,雖然這個(gè)案例與實(shí)際生產(chǎn)還存在一定的差距,但是這個(gè)檢測流程已經(jīng)很接近實(shí)際生產(chǎn)了。 我們先看一下測試結(jié)果: 這個(gè)檢測的主要需求就是,根據(jù)視頻流中流水線上的產(chǎn)品,通過每一幀圖

    2024年02月05日
    瀏覽(19)
  • Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之六 簡單進(jìn)行人臉訓(xùn)練與識別

    Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之六 簡單進(jìn)行人臉訓(xùn)練與識別

    目錄 Python 基于 OpenCV 視覺圖像處理實(shí)戰(zhàn) 之 OpenCV 簡單人臉檢測/識別實(shí)戰(zhàn)案例 之六 簡單進(jìn)行人臉訓(xùn)練與識別 一、簡單介紹 二、簡單進(jìn)行人臉訓(xùn)練與識別 1、LBPH(Local Binary Patterns Histograms)算法進(jìn)行人臉訓(xùn)練和識別 2、實(shí)現(xiàn)步驟: 3、判斷是誰的人臉: 案例中涉及的關(guān)鍵函數(shù)說

    2024年04月26日
    瀏覽(145)
  • OpenCV - C++實(shí)戰(zhàn)(05) — 顏色檢測

    OpenCV - C++實(shí)戰(zhàn)(05) — 顏色檢測

    目錄 第5章? 顏色檢測 5.1 實(shí)現(xiàn)原理 5.2 Lab顏色模型 5.3 cv :: threshold() 閾值函數(shù)? 5.4 計(jì)算圖像之間的距離 5.4.1 公式計(jì)算 5.4.2?cv::absdiff() 5.4.3 cv::floodFill()? ?5.5 完整代碼 Github代碼地址:GitHub - Qinong/OpenCV ????????顏色檢測用來識別圖像中所有像素的某種顏色。這個(gè)算法必領(lǐng)輸

    2024年02月09日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包