A. 我想請教一下opencv中cvFindStereoCorrespondenceBM,cvFindStereoCorrespondenceGC函數的具體流程
http://blog.csdn.net/wqvbjhc/article/details/6260844 這個網址給你,可以參考一下,我以前參考這個試驗成功了~
B. opencv關於像素點的圖像匹配演算法
首先,建議你將圖像中感興趣區域(比如上圖中的字母)取出來進行歸一化,然後在進行匹配率計算。這是因為周圍環境會對匹配率產生影響。
其次,建議你將匹配率演算法改成Hausdorff距離https://en.wikipedia.org/wiki/Hausdorff,這樣對圖像有些平移什麼的都不怎麼敏感了。
C. opencv檢測缺陷用哪些演算法
根據不同的需求來進行不同的處理
1 空洞 這個肯定是像素顏色和周邊的不同 建議用閾值分割 然後輪廓檢測
2 褶皺 這個褶皺肯定會有梯度的變化 建議檢測邊緣 再計算褶皺的梯度信息
3 劃痕 這個和上一個問題相似 但是也有不同 應該是梯度的方向和強度不同(一個是凹一個是凸)
4 斑點 如果只是點點星星的 opencv里也有很多角點檢測演算法 比如 surf fast ORB等
D. opencv三維重建深度怎麼不隨視場變化
視場變化主要是通過找出每對圖像間的對應關系,根據三角測量原理,得到視差圖;
在獲得了視差信息後,根據投影模型很容易地可以得到原始圖像的深度信息和三維信息。立體匹配技術被普遍認為是立體視覺中最困難也是最關鍵的問題,主要是以下因素的影響:
(1)光學失真和雜訊(亮度、色調、飽和度等失衡)
(2)平滑表面的鏡面反射
(3)投影縮減(Foreshortening)
(4)透視失真(Perspective distortions)
(5)低紋理(Low texture)
(6)重復紋理(Repetitive/ambiguous patterns)
(7)透明物體
(8)重疊和非連續
E. 基於opencv的紙張表面質量檢測演算法中
opencv裡面是沒有那種演算法的,它只是提供一些常用的計算函數。具體的演算法,由於你的需求比較特殊,相信應該沒有現成的瑕疵檢測演算法,好在你的需求難度應該不大,通過常用的圖像識別演算法,比如紋理演算法(Gabor演算法)、SURF演算法就可以找到白紙上瑕疵,這些瑕疵都是相當於一張白紙的特徵點嘛!基本思想就是借用圖像識別、匹配過程的思想——找圖像上的特徵點。白紙一般是提取不出特徵點的,要是提取出來了,那就說明白紙上有東西(洞、褶皺或者異物)。
F. opencv實現人臉識別有多少種演算法
OpenCV在2.4.1以後的版本中開始自帶人臉識別,共有三種人臉識別演算法的實現,分別是PCA , LDA , LBPH. OpenCV2創建方法如下:
cv::Ptr<cv::FaceRecognizer>facerPCA,facerLDA;
cv::Ptr<cv::FaceRecognizer>facerLBPH=cv::createLBPHFaceRecognizer();
facerPCA=cv::Algorithm::create<cv::FaceRecognizer>("FaceRecognizer.Eigenfaces");
facerLDA=cv::Algorithm::create<cv::FaceRecognizer>("FaceRecognizer.Fisherfaces");
在OpenCV3中,人臉識別的實現被移動到第三方庫opencv_contrib中,而且OpenCV3版本的各個版本3.0.0,3.2.0,3.3.0的創建方法均不同,且都被移動到cv::face::名字空間下.
G. 人臉比對 opencv怎麼實現
其實有很多辦法,我說一種簡單辦法的思路吧,如果編碼的話,代碼量有些大。
[思路]識別出某個人的臉
(1)你先准備好這個人的幾張或幾十張的圖片讓程序來「學習」
(2)[程序分為兩部分]第一部分:[學習這個人的臉]
把這些圖片逐個讀入程序,然後對每個圖片進行以下處理:
a.初步降噪:可以用cvErode或更好級別的演算法來對圖像完成初步降噪(opencv這塊有幾個挺好的演算法,自己是依據需求和場景來定用哪個吧)
b.用ROI或其他方法劃定出人臉區域
c.為ROI圈定的區域 建立histogram
(3)這樣你就有了幾十個histogram,然後自己寫個演算法來提取這幾十張histogram 的通用特點[也就是模糊的找到這個人的臉部特徵]
(4)然後再依據提取的特徵建立一個histogram
(5)[程序第二部分]:[識別人臉]
a.從攝像頭,讀入人臉
b.初步降噪
c.ROI劃定區域
d.建立一個histogram
e.用這個histogram與之前[學習中]的histogram進行比較,如果差異小於你規定的閥值 ,則確定識別成功。
---------------------------------------------------------------------------------
以上功能只能做到:如果這個人出現在攝像頭前,則能認出這個人來了,如果其他人出現在攝像頭前則輸出「這個人不是要找的人」。
---------------------------------------------------------------------------------
上面的演算法應該算是最簡單的啦,所以效果應該不會太好,opencv中還可以對圖像進行劃分,然後定點五官,這個方法可能更好一些。
---------------------------------------------------------------------------------
如果你要讓它能識別出多人,那麼思路一樣,只不過要對每個人進行上面提到的「機器學習」的過程,也就是建立一個自己的識別庫的過程。
H. 如何利用opencv實現彩色圖像邊緣檢測演算法
在opencv中顯示邊緣檢測很簡單,只需調用一個cvCanny函數,其使用的是Canny演算法來實現對圖像的邊緣檢測.
函數原型為:
void cvCanny( const CvArr* image,CvArr* edges,double threshold1,double threshold2, int aperture_size=3 );
第一個參數為待檢測的圖像,注意一點,其必須是灰度圖.
第二個參數為輸出的邊緣圖,其也是一個灰度圖.
後三個參數與Canny演算法直接相關,threshold1和threshold2 當中的小閾值用來控制邊緣連接,大的閾值用來控制強邊緣的初始分割,aperture_size運算元內核大小,可以去看看Canny演算法.
從彩色圖到灰度圖需要使用到cvCvtColor函數,其接受三個參數,第一為輸入,第二為輸出,第三個為轉換的標識,我們這邊是RGB到GRAY,使用的是CV_RGB2GRAY.
參考demo代碼如下:
#include <iostream>
#include <string>
#include <sstream>
#include <opencv/cv.h>
#include <opencv/highgui.h>
using namespace std;
int String2int(const string& str_)
{
int _nre = 0;
stringstream _ss;
_ss << str_;
_ss >> _nre;
return _nre;
}
void DoCanny(const string& strFileName_)
{
//原彩色圖片
IplImage* _pIplImageIn = cvLoadImage(strFileName_.data());
if (_pIplImageIn == NULL)
{
return;
}
//彩色圖片轉換成灰度圖放置的圖片
IplImage* _pIplImageCanny = cvCreateImage(cvGetSize(_pIplImageIn), _pIplImageIn->depth, 1);
cvCvtColor(_pIplImageIn, _pIplImageCanny, CV_RGB2GRAY);//CV_RGB2GRAY將rgb圖轉成灰度圖
//只有邊緣路徑的圖片
IplImage* _pIplImageOut = cvCreateImage(cvGetSize(_pIplImageIn), IPL_DEPTH_8U, 1);
//邊緣檢測只能作用於灰度圖
if (_pIplImageCanny->nChannels != 1)
{
return;
}
//邊緣檢測操作
cvCanny(_pIplImageCanny, _pIplImageOut, 1, 110, 3);
cvNamedWindow("Src");
cvShowImage("Src", _pIplImageIn);
cvNamedWindow("Canny");
cvShowImage("Canny", _pIplImageOut);
cvWaitKey(0);
cvReleaseImage(&_pIplImageIn);
cvReleaseImage(&_pIplImageCanny);
cvReleaseImage(&_pIplImageOut);
cvDestroyWindow("Src");
cvDestroyWindow("Canny");
}
int main(int argc, char* argv[])
{
if (argc < 2)
{
cout << "You should give the filename of picture!" << endl;
return -1;
}
DoCanny(argv[1]);
return 0;
}