1. 如何替換opencv人臉檢測演算法
我用攝像頭打開480x640的窗口,然後使用OpenCV的人臉檢測函數cvHaarDetectObjects進行人臉檢測。函數配置如下:
faces = cvHaarDetectObjects( detectImg, (CvHaarClassifierCascade*)cascade, storage, search_scale_factor, 3, flags, minFeatureSize );
其中, search_scale_factor是1.1, flags = CV_HAAR_FIND_BIGGEST_OBJECT | CV_HAAR_DO_ROUGH_SEARCH; 也就是說只找一張人臉。 minFeatureSize是(20,20)。
這樣的配置在有人臉的情況下可以實時檢測,大概就是十幾ms的樣子
2. 求基於OpenCV的三幀差分演算法代碼
Detector虛類):實現前景檢測,
2.團塊檢測模塊(CvBlobDetector虛類):實現運動物體(團塊)的的檢測
3.團塊跟蹤模塊(CvBlobTracker虛類):實現運動物體跟蹤
4.團塊運動軌跡產生模塊(CvBlobTrackGen虛類):實現的功能與模塊名字同(下同)
5.團塊軌跡後處理模塊(CvBlobTrackPostProc虛類)
6.團塊軌跡分析模塊(CvBlobTrackAnalysis虛類)
7.以及處理流程模塊(cvBlobTrackerAuto虛類):此模塊可看成膠水,集成上面的模塊。
除了處理流程模塊(因為它只控制流程呀~),每一個模塊可以用多種演算法實現,在程序中,這些演算法就是函數。如(15-16行):
CvFGDetector* cvCreateFGDetector0()
CvFGDetector* cvCreateFGDetector0Simple()
CvFGDetector* cvCreateFGDetector1()
也就是說這三個函數都是能完成前景檢測,具體用哪個,由你在main()函數中調用。
其他模塊也是這樣。
實現這些模塊的類以及完成這些演算法的函數都由OPENCV幫你實現了,blobtrack要做的就是在main()函數中調用這些函數,初始化函數參數以及各種變數。
3. opencv 中自帶的模板匹配演算法出處
方法如下:
使用OPENCV下SIFT庫做圖像匹配的常式
// opencv_empty_proj.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include <opencv2/opencv.hpp>
#include <opencv2/features2d/features2d.hpp>
#include<opencv2/nonfree/nonfree.hpp>
#include<opencv2/legacy/legacy.hpp>
#include<vector>
using namespace std;
using namespace cv;
int _tmain(int argc, _TCHAR* argv[])
{
const char* imagename = "img.jpg";
//從文件中讀入圖像
Mat img = imread(imagename);
Mat img2=imread("img2.jpg");
//如果讀入圖像失敗
if(img.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
if(img2.empty())
{
fprintf(stderr, "Can not load image %s\n", imagename);
return -1;
}
//顯示圖像
imshow("image before", img);
imshow("image2 before",img2);
//sift特徵檢測
SiftFeatureDetector siftdtc;
vector<KeyPoint>kp1,kp2;
siftdtc.detect(img,kp1);
Mat outimg1;
drawKeypoints(img,kp1,outimg1);
imshow("image1 keypoints",outimg1);
KeyPoint kp;
vector<KeyPoint>::iterator itvc;
for(itvc=kp1.begin();itvc!=kp1.end();itvc++)
{
cout<<"angle:"<<itvc->angle<<"\t"<<itvc->class_id<<"\t"<<itvc->octave<<"\t"<<itvc->pt<<"\t"<<itvc->response<<endl;
}
siftdtc.detect(img2,kp2);
Mat outimg2;
drawKeypoints(img2,kp2,outimg2);
imshow("image2 keypoints",outimg2);
SiftDescriptorExtractor extractor;
Mat descriptor1,descriptor2;
BruteForceMatcher<L2<float>> matcher;
vector<DMatch> matches;
Mat img_matches;
extractor.compute(img,kp1,descriptor1);
extractor.compute(img2,kp2,descriptor2);
imshow("desc",descriptor1);
cout<<endl<<descriptor1<<endl;
matcher.match(descriptor1,descriptor2,matches);
drawMatches(img,kp1,img2,kp2,matches,img_matches);
imshow("matches",img_matches);
//此函數等待按鍵,按鍵盤任意鍵就返回
waitKey();
return 0;
}
4. 如何在opencv中使用層次聚類演算法
如何在opencv中使用層次聚類演算法
Invalidate只是放一個WM_PAINT消息在隊列里,不做別的,所以只有當當前函數返回後,進入消息循環,取出WM_PAINT,才執行PAINT,所以不管Invalidate放哪裡,都是最後的。
InvalidateRect(hWnd,&rect,TRUE);向hWnd窗體發出WM_PAINT的消息,強制客戶區域重繪制,
rect是你指定要刷新的區域,此區域外的客戶區域不被重繪,這樣防止客戶區域的一個局部的改動,而導致整個客戶區域重繪而導致閃爍,如果最後的參數為TRUE,則還向窗體發送WM_ERASEBKGND消息,使背景重繪,當然在客戶區域重繪之前。
5. opencv 有isodata 演算法 嗎
你好
參考資料
http://wenku..com/link?url=36q-_2P_T9I9j-8_--GJAxJuyqR8CcRAc1mSDsS5J3LyRC2_
6. 如何使用EMCV將opencv演算法移植到DSP
EMCV全稱為Embedded Computer Vision Library,是一個可在TI DM64x系列DSP上運行的計算機視覺庫。EMCV提供了跟OpenCV完全一致的函數介面,通過EMCV,你可以輕松的將你的OpenCV演算法移植到 DSP,甚至不用改一行代碼。 目前EMCV已經支持IplImage, CvMat,CvSeq等基本數據結構,可使用cvCreateImage等創建和釋放圖像,以及contour檢測等。 參考
7. opencv演算法怎麼實現八鄰域的標記
用cvRectangle()函數。
OpenCV裡面的繪圖函數函數功能: 通過對角線上的兩個頂點繪制簡單、指定粗細或者帶填充的矩形函數原型:void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,int thickness=1, int line_type=8, int shift=0 );參數介紹:img -- 圖像.pt1 -- 矩形的一個頂點。pt2 -- 矩形對角線上的另一個頂點color -- 線條顏色 (RGB) 或亮度(灰度圖像 )(grayscale image)。thickness -- 組成矩形的線條的粗細程度。取負值時(如 CV_FILLED)函數繪制填充了色彩的矩形。line_type -- 線條的類型。見cvLine的描述shift -- 坐標點的小數點位數。
8. opencv關於像素點的圖像匹配演算法
首先,建議你將圖像中感興趣區域(比如上圖中的字母)取出來進行歸一化,然後在進行匹配率計算。這是因為周圍環境會對匹配率產生影響。
其次,建議你將匹配率演算法改成Hausdorff距離https://en.wikipedia.org/wiki/Hausdorff,這樣對圖像有些平移什麼的都不怎麼敏感了。
9. opencv中ransac演算法需要什麼庫
對閾值的選擇: 當兩幅圖像的SIFT特徵向量生成後,下一步我們採用關鍵點特徵向量的歐式距離來作為 兩幅圖像中關鍵點的相似性判定度量。取圖像1中的某個關鍵點,並找出其與圖像2中歐式距離最近的前兩個關鍵點,在這兩個關鍵點中,如果最近的距離
10. 3.opencv下的kmean演算法,函數為cv2.kmeans 函數的格式是什麼分別有什麼含義
因為K-mean的初始化是需要隨機的,要隨機的確定K個點作為初始點。