『壹』 cv演算法是什麼
計算機視覺演算法。
計算機視覺是一門研究如何使機器「看」的科學,更進一步的說,就是是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。
作為一個科學學科,計算機視覺研究相關的理論和技術,試圖建立能夠從圖像或者多維數據中獲取『信息』的人工智慧系統。這里所 指的信息指Shannon定義的,可以用來幫助做一個「決定」的信息。
因為感知可以看作是從感官信號中提 取信息,所以計算機視覺也可以看作是研究如何使人工系統從圖像或多維數據中「感知」的科學。
計算機視覺應用的實例包括用於系統:
(1)控制過程,比如,一個工業機器人 。
(2)導航,例如,通過自主汽車或移動機器人。
(3)檢測的事件,如,對視頻監控和人數統計。
(4)組織信息,例如,對於圖像和圖像序列的索引資料庫。
(5)造型對象或環境,如,醫學圖像分析系統或地形模型。
(6)相互作用,例如,當輸入到一個裝置,用於計算機人的交互。
(7)自動檢測,例如,在製造業的應用程序。
『貳』 opencv拼接圖像失敗問題
看下,你要拼接的兩幅圖像尋找到的特徵點是否能匹配上,或者先看下兩幅圖像是否有重合區域,估計是點匹配不上造成的。
『叄』 你好,請問您怎麼用opencv檢測一幅圖片的邊緣,主要是怎麼進行圖片平滑還有怎麼應用Prewitt運算元、sobel!
說說我的做法~
在提取邊緣時,前處理工作很重要!且,噪音全都去掉是比較困難的是
1.可以先做平滑cvSmooth,去除噪音
2.可以用正規化或者直方圖均衡化來處理圖像像素~
3.用CLAHE演算法,增加對比度
4.prewitt,sobel,運算元都不是很精確,canny運算元雖比較好但是不能提取封閉輪廓。你可以用snake,或者GVFsnake來動態提取邊緣,但是之前得提取初始邊緣。
以上,如果你想用prewitt,sobel的話可以到opencv論壇去搜索,答案有很多。
http://www.opencv.org.cn/index.php/%E9%A6%96%E9%A1%B5這是論壇
http://www.opencv.org.cn/index.php/Canny%E8%BE%B9%E7%BC%98%E6%A3%80%E6%B5%8B這是canny檢測的例子
http://fsa.ia.ac.cn/opencv-doc-cn/opencv-doc-cn-0.9.7/ref/opencvref_cv.cn.htm這是函數的用法
祝你成功
『肆』 cvfitline用的什麼演算法
1、cvLoadImage:將圖像文件載入至內存;
2、cvNamedWindow:在屏幕上創建一個窗口;
3、cvShowImage:在一個已創建好的窗口中顯示圖像;
4、cvWaitKey:使程序暫停,等待用戶觸發一個按鍵操作;
5、cvReleaseImage:釋放圖像文件所分配的內存;
6、cvDestroyWindow:銷毀顯示圖像文件的窗口;
7、cvCreateFileCapture:通過參數設置確定要讀入的AVI文件;
8、cvQueryFrame:用來將下一幀文件載入內存;
9、cvReleaseCapture:釋放CvCapture結構開辟的內存空間;
10、cvCreateTrackbar:創建一個滾動條;
11、cvSetCaptureProperty:設置CvCapture對象的各種屬性;
12、cvGetCaptureProperty:查詢CvCapture對象的各種屬性;
13、cvGetSize:當前圖像結構的大小;
14、cvSmooth:對圖像進行平滑處理;
15、cvPyrDown:圖像金字塔,降采樣,圖像縮小為原來四分之一;
16、cvCanny:Canny邊緣檢測;
17、cvCreateCameraCapture:從攝像設備中讀入數據;
18、cvCreateVideoWriter:創建一個寫入設備以便逐幀將流寫入文件;
19、cvWriteFrame:逐幀將流寫入文件;
20、cvReleaseVideoWriter:釋放CvVideoWriter結構開辟的內存空間;
21、CV_MAT_ELEM:從矩陣中得到一個元素;
22、cvAbs:計算數組中所有元素的絕對值;
23、cvAbsDiff:計算兩個數組差值的絕對值;
24、cvAbsDiffS:計算數組和標量差值的絕對值;
25、cvAdd:兩個數組的元素級的加運算;
26、cvAddS:一個數組和一個標量的元素級的相加運算;
27、cvAddWeighted:兩個數組的元素級的加權相加運算(alpha運算);
28、cvAvg:計算數組中所有元素的平均值;
29、cvAvgSdv:計算數組中所有元素的絕對值和標准差;
30、cvCalcCovarMatrix:計算一組n維空間向量的協方差;
31、cvCmp:對兩個數組中的所有元素運用設置的比較操作;
32、cvCmpS:對數組和標量運用設置的比較操作;
33、cvConvertScale:用可選的縮放值轉換數組元素類型;
34、cvCopy:把數組中的值復制到另一個數組中;
35、cvCountNonZero:計算數組中非0值的個數;
36、cvCrossProct:計算兩個三維向量的向量積(叉積);
37、cvCvtColor:將數組的通道從一個顏色空間轉換另外一個顏色空間;
38、cvDet:計算方陣的行列式;
39、cvDiv:用另外一個數組對一個數組進行元素級的除法運算;
40、cvDotProct:計算兩個向量的點積;
41、cvEigenVV:計算方陣的特徵值和特徵向量;
42、cvFlip:圍繞選定軸翻轉;
43、cvGEMM:矩陣乘法;
44、cvGetCol:從一個數組的列中復制元素;
45、cvGetCols:從數據的相鄰的多列中復制元素;
46、cvGetDiag:復制數組中對角線上的所有元素;
47、cvGetDims:返回數組的維數;
48、cvGetDimSize:返回一個數組的所有維的大小;
49、cvGetRow:從一個數組的行中復制元素值;
50、cvGetRows:從一個數組的多個相鄰的行中復制元素值;
51、cvGetSize:得到二維的數組的尺寸,以CvSize返回;
52、cvGetSubRect:從一個數組的子區域復制元素值;
53、cvInRange:檢查一個數組的元素是否在另外兩個數組中的值的范圍內;
54、cvInRangeS:檢查一個數組的元素的值是否在另外兩個標量的范圍內;
55、cvInvert:求矩陣的逆;
56、cvMahalonobis:計算兩個向量間的馬氏距離;
57、cvMax:在兩個數組中進行元素級的取最大值操作;
58、cvMaxS:在一個數組和一個標量中進行元素級的取最大值操作;
59、cvMerge:把幾個單通道圖像合並為一個多通道圖像;
60、cvMin:在兩個數組中進行元素級的取最小值操作;
61、cvMinS:在一個數組和一個標量中進行元素級的取最小值操作;
62、cvMinMaxLoc:尋找數組中的最大最小值;
63、cvMul:計算兩個數組的元素級的乘積(點乘);
64、cvNot:按位對數組中的每一個元素求反;
65、cvNormalize:將數組中元素進行歸一化;
66、cvOr:對兩個數組進行按位或操作;
67、cvOrs:在數組與標量之間進行按位或操作;
68、cvRece:通過給定的操作符將二維數組簡為向量;
69、cvRepeat:以平鋪的方式進行數組復制;
70、cvSet:用給定值初始化數組;
71、cvSetZero:將數組中所有元素初始化為0;
72、cvSetIdentity:將數組中對角線上的元素設為1,其他置0;
73、cvSolve:求出線性方程組的解;
74、cvSplit:將多通道數組分割成多個單通道數組;
75、cvSub:兩個數組元素級的相減;
76、cvSubS:元素級的從數組中減去標量;
77、cvSubRS:元素級的從標量中減去數組;
78、cvSum:對數組中的所有元素求和;
79、cvSVD:二維矩陣的奇異值分解;
80、cvSVBkSb:奇異值回代計算;
81、cvTrace:計算矩陣跡;
82、cvTranspose:矩陣的轉置運算;
83、cvXor:對兩個數組進行按位異或操作;
84、cvXorS:在數組和標量之間進行按位異或操作;
85、cvZero:將所有數組中的元素置為0;
86、cvConvertScaleAbs:計算可選的縮放值的絕對值之後再轉換數組元素的類型;
87、cvNorm:計算數組的絕對范數, 絕對差分范數或者相對差分范數;
88、cvAnd:對兩個數組進行按位與操作;
89、cvAndS:在數組和標量之間進行按位與操作;
90、cvScale:是cvConvertScale的一個宏,可以用來重新調整數組的內容,並且可以將參數從一種數
據類型轉換為另一種;
91、cvT:是函數cvTranspose的縮寫;
92、cvLine:畫直線;
93、cvRectangle:畫矩形;
94、cvCircle:畫圓;
95、cvEllipse:畫橢圓;
96、cvEllipseBox:使用外接矩形描述橢圓;
97、cvFillPoly、cvFillConvexPoly、cvPolyLine:畫多邊形;
98、cvPutText:在圖像上輸出一些文本;
99、cvInitFont:採用一組參數配置一些用於屏幕輸出的基本個特定字體;
100、cvSave:矩陣保存;
101、cvLoad:矩陣讀取;
102、cvOpenFileStorage:為讀/寫打開存儲文件;
103、cvReleaseFileStorage:釋放存儲的數據;
104、cvStartWriteStruct:開始寫入新的數據結構;
105、cvEndWriteStruct:結束寫入數據結構;
106、cvWriteInt:寫入整數型;
107、cvWriteReal:寫入浮點型;
108、cvWriteString:寫入字元型;
109、cvWriteComment:寫一個XML或YAML的注釋字串;
110、cvWrite:寫一個對象;
111、cvWriteRawData:寫入多個數值;
112、cvWriteFileNode:將文件節點寫入另一個文件存儲器;
113、cvGetRootFileNode:獲取存儲器最頂層的節點;
114、cvGetFileNodeByName:在映圖或存儲器中找到相應節點;
115、cvGetHashedKey:為名稱返回一個惟一的指針;
116、cvGetFileNode:在映圖或文件存儲器中找到節點;
117、cvGetFileNodeName:返迴文件的節點名;
118、cvReadInt:讀取一個無名稱的整數型;
119、cvReadIntByName:讀取一個有名稱的整數型;
120、cvReadReal:讀取一個無名稱的浮點型;
121、cvReadRealByName:讀取一個有名稱的浮點型;
122、cvReadString:從文件節點中尋找字元串;
123、cvReadStringByName:找到一個有名稱的文件節點並返回它;
124、cvRead:將對象解碼並返回它的指針;
125、cvReadByName:找到對象並解碼;
126、cvReadRawData:讀取多個數值;
127、cvStartReadRawData:初始化文件節點序列的讀取;
128、cvReadRawDataSlice:讀取文件節點的內容;
129、cvGetMoleInfo:檢查IPP庫是否已經正常安裝並且檢驗運行是否正常;
130、cvResizeWindow:用來調整窗口的大小;
131、cvSaveImage:保存圖像;
132、cvMoveWindow:將窗口移動到其左上角為x,y的位置;
133、cvDestroyAllWindow:用來關閉所有窗口並釋放窗口相關的內存空間;
134、cvGetTrackbarPos:讀取滑動條的值;
135、cvSetTrackbarPos:設置滑動條的值;
136、cvGrabFrame:用於快速將幀讀入內存;
137、cvRetrieveFrame:對讀入幀做所有必須的處理;
138、cvConvertImage:用於在常用的不同圖像格式之間轉換;
139、cvErode:形態腐蝕;
140、cvDilate:形態學膨脹;
141、cvMorphologyEx:更通用的形態學函數;
142、cvFloodFill:漫水填充演算法,用來進一步控制哪些區域將被填充顏色;
143、cvResize:放大或縮小圖像;
144、cvPyrUp:圖像金字塔,將現有的圖像在每個維度上都放大兩倍;
145、cvPyrSegmentation:利用金字塔實現圖像分割;
146、cvThreshold:圖像閾值化;
147、cvAcc:可以將8位整數類型圖像累加為浮點圖像;
148、cvAdaptiveThreshold:圖像自適應閾值;
149、cvFilter2D:圖像卷積;
150、cvCopyMakeBorder:將特定的圖像輕微變大,然後以各種方式自動填充圖像邊界;
151、cvSobel:圖像邊緣檢測,Sobel運算元;
152、cvLaplace:拉普拉斯變換、圖像邊緣檢測;
153、cvHoughLines2:霍夫直線變換;
154、cvHoughCircles:霍夫圓變換;
155、cvRemap:圖像重映射,校正標定圖像,圖像插值;
156、cvWarpAffine:稠密仿射變換;
157、cvGetQuadrangleSubPix:仿射變換;
158、cvGetAffineTransform:仿射映射矩陣的計算;
159、cvCloneImage:將整個IplImage結構復制到新的IplImage中;
160、cv2DRotationMatrix:仿射映射矩陣的計算;
161、cvTransform:稀疏仿射變換;
162、cvWarpPerspective:密集透視變換(單應性);
163、cvGetPerspectiveTransform:計算透視映射矩陣;
164、cvPerspectiveTransform:稀疏透視變換;
165、cvCartToPolar:將數值從笛卡爾空間到極坐標(極性空間)進行映射;
166、cvPolarToCart:將數值從極性空間到笛卡爾空間進行映射;
167、cvLogPolar:對數極坐標變換;
168、cvDFT:離散傅里葉變換;
169、cvMulSpectrums:頻譜乘法;
170、cvDCT:離散餘弦變換;
171、cvIntegral:計算積分圖像;
172、cvDistTransform:圖像的距離變換;
173、cvEqualizeHist:直方圖均衡化;
174、cvCreateHist:創建一新直方圖;
175、cvMakeHistHeaderForArray:根據已給出的數據創建直方圖;
176、cvNormalizeHist:歸一化直方圖;
177、cvThreshHist:直方圖閾值函數;
178、cvCalcHist:從圖像中自動計算直方圖;
179、cvCompareHist:用於對比兩個直方圖的相似度;
180、cvCalcEMD2:陸地移動距離(EMD)演算法;
181、cvCalcBackProject:反向投影;
182、cvCalcBackProjectPatch:圖塊的方向投影;
183、cvMatchTemplate:模板匹配;
184、cvCreateMemStorage:用於創建一個內存存儲器;
185、cvCreateSeq:創建序列;
186、cvSeqInvert:將序列進行逆序操作;
187、cvCvtSeqToArray:復制序列的全部或部分到一個連續內存數組中;
188、cvFindContours:從二值圖像中尋找輪廓;
189、cvDrawContours:繪制輪廓;
190、cvApproxPoly:使用多邊形逼近一個輪廓;
191、cvContourPerimeter:輪廓長度;
192、cvContoursMoments:計算輪廓矩;
193、cvMoments:計算Hu不變矩;
194、cvMatchShapes:使用矩進行匹配;
195、cvInitLineIterator:對任意直線上的像素進行采樣;
196、cvSampleLine:對直線采樣;
197、cvAbsDiff:幀差;
198、cvWatershed:分水嶺演算法;
199、cvInpaint:修補圖像;
200、cvGoodFeaturesToTrack:尋找角點;
201、cvFindCornerSubPix:用於發現亞像素精度的角點位置;
202、cvCalcOpticalFlowLK:實現非金字塔的Lucas-Kanade稠密光流演算法;
203、cvMeanShift:mean-shift跟蹤演算法;
204、cvCamShift:camshift跟蹤演算法;
205、cvCreateKalman:創建Kalman濾波器;
206、cvCreateConDensation:創建condensation濾波器;
207、cvConvertPointsHomogenious:對齊次坐標進行轉換;
208、cvFindChessboardCorners:定位棋盤角點;
209、cvFindHomography:計算單應性矩陣;
210、cvRodrigues2:羅德里格斯變換;
211、cvFitLine:直線擬合演算法;
212、cvCalcCovarMatrix:計算協方差矩陣;
213、cvInvert:計算協方差矩陣的逆矩陣;
214、cvMahalanobis:計算Mahalanobis距離;
215、cvKMeans2:K均值;
216、cvCloneMat:根據一個已有的矩陣創建一個新矩陣;
217、cvPreCornerDetect:計算用於角點檢測的特徵圖;
218、cvGetImage:CvMat圖像數據格式轉換成IplImage圖像數據格式;
219、cvMatMul:兩矩陣相乘;
『伍』 已經使用opencv中的cvCanny演算法對圖像進行了邊緣檢測,得到了所有邊緣,現在如何讓邊緣一個一個顯示
利用cvFindContours函數,將邊緣一一單獨存儲,然後可以單獨顯示
『陸』 關於圖像處理的
CvCapture* pCapture = CreateCameraCapture(0);
IplImage* pFrame = NULL;
cvNamedWindow("video",1);
while(pFrame = cvQueryFrame( pCapture ))
{
cvShowImage("video", pFrame );
if( cvWaitKey(2) >= 0 )
{
break;
}
}
cvDestroyWindow("video");
cvReleaseImage(&pFrame);
cvReleaseCapture(&pCapture);
『柒』 cv演算法是什麼呀
cv演算法是計算機視覺演算法。是一門研究如何使機器「看」的科學,更進一步的說,就是是指用攝影機和電腦代替人眼對目標進行識別、跟蹤和測量等機器視覺,並進一步做圖形處理,使電腦處理成為更適合人眼觀察或傳送給儀器檢測的圖像。
作為一個科學學科,計算機視覺研究相關的理論和技術,試圖建立能夠從圖像或者多維數據中獲取『信息』的人工智慧系統。這里所 指的信息指Shannon定義的,可以用來幫助做一個「決定」的信息。
定義:
計算機視覺是使用計算機及相關設備對生物視覺的一種模擬。它的主要任務就是通過對採集的圖片或視頻進行處理以獲得相應場景的三維信息,就像人類和許多其他類生物每天所做的那樣。
計算機視覺是一門關於如何運用照相機和計算機來獲取我們所需的,被拍攝對象的數據與信息的學問。形象地說,就是給計算機安裝上眼睛(照相機)和大腦(演算法),讓計算機能夠感知環境。
我們中國人的成語"眼見為實"和西方人常說的"One picture is worth ten thousand words"表達了視覺對人類的重要性。不難想像,具有視覺的機器的應用前景能有多麼地寬廣。
『捌』 如何利用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;
}
『玖』 求解:OpenCV中的圖像修復函數cvInpaint
cvInpaint(原圖像,修復模板,處理後的圖像,領域半徑,flags);。
你說的問題肯定是Imask造成的,cvZero(Imask)把Imask清空了都。
Imask是單通道的修復模板,對Imask應該還要有其他的一些操作,具體的你可以google,這個函數我也不太懂的。