雙目匹配與視差計算

立體匹配主要是通過找出每對圖像間的對應關系,根據三角測量原理,得到視差圖;在獲得了視差信息后,根據投影模型很容易地可以得到原始圖像的深度信息和三維信息。立體匹配技術被普遍認為是立體視覺中最困難也是最關鍵的問題,主要是以下因素的影響:

?

(1)?光學失真和噪聲(亮度、色調、飽和度等失衡)


(2)?平滑表面的鏡面反射


(3)?投影縮減(Foreshortening)

(4)?透視失真(Perspective distortions)

(5)?低紋理(Low texture)

(6)?重復紋理(Repetitive/ambiguous patterns)

(7)?透明物體

(8)?重疊和非連續



目前立體匹配算法是計算機視覺中的一個難點和熱點,算法很多,但是一般的步驟是:

?

?

A、匹配代價計算

匹配代價計算是整個立體匹配算法的基礎,實際是對不同視差下進行灰度相似性測量。常見的方法有灰度差的平方SD(squared intensity differences),灰度差的絕對值AD(absolute intensity differences)等。另外,在求原始匹配代價時可以設定一個上限值,來減弱疊加過程中的誤匹配的影響。以AD法求匹配代價為例,可用下式進行計算,其中T為設定的閾值。

B、?匹配代價疊加

一般來說,全局算法基于原始匹配代價進行后續算法計算。而區域算法則需要通過窗口疊加來增強匹配代價的可靠性,根據原始匹配代價不同,可分為:

C、?視差獲取

對于區域算法來說,在完成匹配代價的疊加以后,視差的獲取就很容易了,只需在一定范圍內選取疊加匹配代價最優的點(SAD和SSD取最小值,NCC取最大值)作為對應匹配點,如勝者為王算法WTA(Winner-take-all)。而全局算法則直接對原始匹配代價進行處理,一般會先給出一個能量評價函數,然后通過不同的優化算法來求得能量的最小值,同時每個點的視差值也就計算出來了。

?

?

D、視差細化(亞像素級)

大多數立體匹配算法計算出來的視差都是一些離散的特定整數值,可滿足一般應用的精度要求。但在一些精度要求比較高的場合,如精確的三維重構中,就需要在初始視差獲取后采用一些措施對視差進行細化,如匹配代價的曲線擬合、圖像濾波、圖像分割等。

?

有關立體匹配的介紹和常見匹配算法的比較,推薦大家看看Stefano Mattoccia?的講義?Stereo Vision: algorithms and applications,190頁的ppt,講解得非常形象詳盡。

?

?

?

?

?

1.?opencv2.1和opencv2.0在做stereo vision方面有什么區別了?

2.1版增強了Stereo Vision方面的功能:

(1) 新增了 SGBM 立體匹配算法(源自Heiko Hirschmuller的《Stereo Processing by Semi-global Matching and Mutual Information》),可以獲得比 BM 算法物體輪廓更清晰的視差圖(但低紋理區域容易出現橫/斜紋路,在 GCstate->fullDP 選項使能時可消減這種異常紋路,但對應區域視差變為0,且運行速度會有所下降),速度比 BM 稍慢, 352*288的幀處理速度大約是 5 幀/秒;

(2) 視差效果:BM < SGBM < GC;處理速度:BM > SGBM > GC ;

(3) BM 算法比2.0版性能有所提升,其狀態參數新增了對左右視圖感興趣區域 ROI 的支持(roi1 和 roi2,由stereoRectify函數產生);

(4) BM 算法和 GC 算法的核心代碼改動不大,主要是面向多線程運算方面的(由 OpenMP 轉向 Intel TBB);

(5) cvFindStereoCorrespondenceBM 函數的disparity參數的數據格式新增了 CV_32F 的支持,這種格式的數據給出實際視差,而 2.0 版只支持 CV_16S,需要除以 16.0 才能得到實際的視差數值。

?

?

2.?用于立體匹配的圖像可以是彩色的嗎?

在OpenCV2.1中,BM和GC算法只能對8位灰度圖像計算視差,SGBM算法則可以處理24位(8bits*3)彩色圖像。所以在讀入圖像時,應該根據采用的算法來處理圖像:

int color_mode = alg == STEREO_SGBM ? 1 : 0;
//
// 載入圖像
cvGrabFrame( lfCam );
cvGrabFrame( riCam );
frame1 = cvRetrieveFrame( lfCam );
frame2 = cvRetrieveFrame( riCam );
if(frame1.empty()) break;
resize(frame1, img1, img_size, 0, 0);
resize(frame2, img2, img_size, 0, 0);
// 選擇彩色或灰度格式作為雙目匹配的處理圖像
if (!color_mode && cn>1)
{
cvtColor(img1, img1gray, CV_BGR2GRAY);
cvtColor(img2, img2gray, CV_BGR2GRAY);
img1p = img1gray;
img2p = img2gray;
}
else
{
img1p = img1;
img2p = img2;
}

3.?怎樣獲取與原圖像有效像素區域相同的視差圖?

OpenCV2.0及以前的版本中,所獲取的視差圖總是在左側和右側有明顯的黑色區域,這些區域沒有有效的視差數據。視差圖有效像素區域 與視差窗口(ndisp,一般取正值且能被16整除)和最小視差值(mindisp,一般取0或負值)相關,視差窗口越大,視差圖左側的黑色區域越大,最小視差值越小,視差圖右側的黑色區域越大。其原因是為了保證參考圖像(一般是左視圖)的像素點能在目標圖像(右視圖)中按照設定的視差匹配窗口匹配對應點, OpenCV?只從參考圖像的第 (ndisp - 1 + mindisp)?列開始向右計算視差,第 0?列到第 (ndisp - 1 + mindisp)?列的區域視差統一設置為 (mindisp - 1) *16;視差計算到第 width + mindisp?列時停止,余下的右側區域視差值也統一設置為 (mindisp - 1) *16

00177 static const int DISPARITY_SHIFT = 4;
…
00411     int ndisp = state->numberOfDisparities;
00412     int mindisp = state->minDisparity;
00413     int lofs = MAX(ndisp - 1 + mindisp, 0);
00414     int rofs = -MIN(ndisp - 1 + mindisp, 0);
00415     int width = left->cols, height = left->rows;
00416     int width1 = width - rofs - ndisp + 1;
…
00420     short FILTERED = (short)((mindisp - 1) << DISPARITY_SHIFT);
…
00466     // initialize the left and right borders of the disparity map
00467     for( y = 0; y < height; y++ )
00468     {
00469         for( x = 0; x < lofs; x++ )
00470             dptr[y*dstep + x] = FILTERED;
00471         for( x = lofs + width1; x < width; x++ )
00472             dptr[y*dstep + x] = FILTERED;
00473     }
00474     dptr += lofs;
00475
00476     for( x = 0; x < width1; x++, dptr++ )…

這樣的設置很明顯是不符合實際應用的需求的,它相當于把攝像頭的視場范圍縮窄了。因此, OpenCV2.1?做了明顯的改進,不再要求左右視圖和視差圖的大小(size)一致, 允許對視差圖進行左右邊界延拓,這樣,雖然計算視差時還是按上面的代碼思路來處理左右邊界,但是視差圖的邊界得到延拓后,有效視差的范圍就能夠與對應視圖完全對應。具體的實現代碼范例如下:

//
// 對左右視圖的左邊進行邊界延拓,以獲取與原始視圖相同大小的有效視差區域
copyMakeBorder(img1r, img1b, 0, 0, m_nMaxDisp, 0, IPL_BORDER_REPLICATE);
copyMakeBorder(img2r, img2b, 0, 0, m_nMaxDisp, 0, IPL_BORDER_REPLICATE);//
// 計算視差
if( alg == STEREO_BM )
{bm(img1b, img2b, dispb);// 截取與原始畫面對應的視差區域(舍去加寬的部分)displf = dispb.colRange(m_nMaxDisp, img1b.cols);	
}
else if(alg == STEREO_SGBM)
{sgbm(img1b, img2b, dispb);displf = dispb.colRange(m_nMaxDisp, img1b.cols);
}

4.?cvFindStereoCorrespondenceBM的輸出結果好像不是以像素點為單位的視差?

“@scyscyao:在OpenCV2.0中,BM函數得出的結果是以16位符號數的形式的存儲的,出于精度需要,所有的視差在輸出時都擴大了16倍(2^4)。其具體代碼表示如下:

dptr[y*dstep] = (short)(((ndisp - mind - 1 + mindisp)*256 + (d != 0 ? (p-n)*128/d : 0) + 15) >> 4);

可以看到,原始視差在左移8位(256)并且加上一個修正值之后又右移了4位,最終的結果就是左移4位。

因此,在實際求距離時,cvReprojectTo3D出來的X/W,Y/W,Z/W都要乘以16 (也就是W除以16),才能得到正確的三維坐標信息。”

?

OpenCV2.1中,BM算法可以用 CV_16S?或者 CV_32F?的方式輸出視差數據,使用32位float格式可以得到真實的視差值,而CV_16S 格式得到的視差矩陣則需要 除以16 才能得到正確的視差。另外,OpenCV2.1另外兩種立體匹配算法?SGBM?和 GC?只支持 CV_16S?格式的 disparity?矩陣

?

?

?

5.?如何設置BM、SGBM和GC算法的狀態參數?

?

(1)StereoBMState

// 預處理濾波參數

  • preFilterType:預處理濾波器的類型,主要是用于降低亮度失真(photometric distortions)、消除噪聲和增強紋理等, 有兩種可選類型:CV_STEREO_BM_NORMALIZED_RESPONSE(歸一化響應) 或者?CV_STEREO_BM_XSOBEL(水平方向Sobel算子,默認類型), 該參數為 int 型;
  • preFilterSize:預處理濾波器窗口大小,容許范圍是[5,255],一般應該在?5x5..21x21?之間,參數必須為奇數值, int 型
  • preFilterCap:預處理濾波器的截斷值,預處理的輸出值僅保留[-preFilterCap, preFilterCap]范圍內的值,參數范圍:1 - 31(文檔中是31,但代碼中是 63), int

// SAD 參數

  • SADWindowSize:SAD窗口大小,容許范圍是[5,255],一般應該在?5x5?至 21x21?之間,參數必須是奇數,int 型
  • minDisparity:最小視差默認值為?0, 可以是負值,int 型
  • numberOfDisparities:視差窗口,即最大視差值與最小視差值之差, 窗口大小必須是?16?的整數倍,int 型

// 后處理參數

  • textureThreshold:低紋理區域的判斷閾值。如果當前SAD窗口內所有鄰居像素點的x導數絕對值之和小于指定閾值,則該窗口對應的像素點的視差值為 0(That is, if the sum of absolute values of x-derivatives computed over SADWindowSize by SADWindowSize pixel neighborhood is smaller than the parameter, no disparity is computed at the pixel),該參數不能為負值,int 型
  • uniquenessRatio:視差唯一性百分比, 視差窗口范圍內最低代價是次低代價的(1 + uniquenessRatio/100)倍時,最低代價對應的視差值才是該像素點的視差,否則該像素點的視差為 0 (the minimum margin in percents between the best (minimum) cost function value and the second best value to accept the computed disparity, that is, accept the computed disparity d^ only if SAD(d) >= SAD(d^) x (1 + uniquenessRatio/100.) for any d != d*+/-1 within the search range ),該參數不能為負值,一般5-15左右的值比較合適,int 型
  • speckleWindowSize:檢查視差連通區域變化度的窗口大小, 值為 0 時取消 speckle 檢查,int 型
  • speckleRange:視差變化閾值,當窗口內視差變化大于閾值時,該窗口內的視差清零,int 型

// OpenCV2.1 新增的狀態參數

  • roi1, roi2:左右視圖的有效像素區域,一般由雙目校正階段的?cvStereoRectify?函數傳遞,也可以自行設定。一旦在狀態參數中設定了 roi1 和 roi2,OpenCV 會通過cvGetValidDisparityROI 函數計算出視差圖的有效區域,在有效區域外的視差值將被清零。
  • disp12MaxDiff:左視差圖(直接計算得出)和右視差圖(通過cvValidateDisparity計算得出)之間的最大容許差異。超過該閾值的視差值將被清零。該參數默認為?-1,即不執行左右視差檢查。int 型。注意在程序調試階段最好保持該值為 -1,以便查看不同視差窗口生成的視差效果。具體請參見《使用OpenGL動態顯示雙目視覺三維重構效果示例》一文中的討論。

在上述參數中,對視差生成效果影響較大的主要參數是?SADWindowSize、numberOfDisparities?和 uniquenessRatio?三個,一般只需對這三個參數進行調整,其余參數按默認設置即可

在OpenCV2.1中,BM算法有C和C++ 兩種實現模塊。

?

(2)StereoSGBMState

SGBM算法的狀態參數大部分與BM算法的一致,下面只解釋不同的部分:

  • SADWindowSize:SAD窗口大小,容許范圍是[1,11],一般應該在?3x3?至 11x11?之間,參數必須是奇數,int 型
  • P1, P2:控制視差變化平滑性的參數。P1、P2的值越大,視差越平滑。P1是相鄰像素點視差增/減 1 時的懲罰系數;P2是相鄰像素點視差變化值大于1時的懲罰系數。P2必須大于P1。OpenCV2.1提供的例程?stereo_match.cpp?給出了 P1?和 P2?比較合適的數值
  • fullDP:布爾值,當設置為 TRUE 時,運行雙通道動態編程算法(full-scale 2-pass dynamic programming algorithm),會占用O(W*H*numDisparities)個字節,對于高分辨率圖像將占用較大的內存空間。一般設置為?FALSE

注意OpenCV2.1的SGBM算法是用C++?語言編寫的,沒有C實現模塊。與H. Hirschmuller提出的原算法相比,主要有如下變化:

  1. 算法默認運行單通道DP算法,只用了5個方向,而fullDP使能時則使用8個方向(可能需要占用大量內存)。
  2. 算法在計算匹配代價函數時,采用塊匹配方法而非像素匹配(不過SADWindowSize=1時就等于像素匹配了)。
  3. 匹配代價的計算采用BT算法("Depth Discontinuities by Pixel-to-Pixel Stereo" by S. Birchfield and C. Tomasi),并沒有實現基于互熵信息的匹配代價計算。
  4. 增加了一些BM算法中的預處理和后處理程序。

?

(3)StereoGCState

GC算法的狀態參數只有兩個:numberOfDisparities?和 maxIters?,并且只能通過?cvCreateStereoGCState?在創建算法狀態結構體時一次性確定,不能在循環中更新狀態信息。GC算法并不是一種實時算法,但可以得到物體輪廓清晰準確的視差圖,適用于靜態環境物體的深度重構。

注意GC算法只能在C語言模式下運行,并且不能對視差圖進行預先的邊界延拓,左右視圖和左右視差矩陣的大小必須一致。

?

?

6.?如何實現視差圖的偽彩色顯示?

首先要將16位符號整形的視差矩陣轉換為8位無符號整形矩陣,然后按照一定的變換關系進行偽彩色處理。我的實現代碼如下:

// 轉換為 CV_8U 格式,彩色顯示
dispLfcv = displf, dispRicv = dispri, disp8cv = disp8;
if (alg == STEREO_GC)
{cvNormalize( &dispLfcv, &disp8cv, 0, 256, CV_MINMAX );
} 
else
{displf.convertTo(disp8, CV_8U, 255/(m_nMaxDisp*16.));
}
F_Gray2Color(&disp8cv, vdispRGB);

灰度圖轉偽彩色圖的代碼,主要功能是使灰度圖中 亮度越高的像素點,在偽彩色圖中對應的點越趨向于 紅色;亮度越低,則對應的偽彩色越趨向于 藍色;總體上按照灰度值高低,由紅漸變至藍,中間色為綠色。其對應關系如下圖所示:

void F_Gray2Color(CvMat* gray_mat, CvMat* color_mat)
{if(color_mat)cvZero(color_mat);int stype = CV_MAT_TYPE(gray_mat->type), dtype = CV_MAT_TYPE(color_mat->type);int rows = gray_mat->rows, cols = gray_mat->cols;// 判斷輸入的灰度圖和輸出的偽彩色圖是否大小相同、格式是否符合要求if (CV_ARE_SIZES_EQ(gray_mat, color_mat) && stype == CV_8UC1 && dtype == CV_8UC3){CvMat* red = cvCreateMat(gray_mat->rows, gray_mat->cols, CV_8U);CvMat* green = cvCreateMat(gray_mat->rows, gray_mat->cols, CV_8U);CvMat* blue = cvCreateMat(gray_mat->rows, gray_mat->cols, CV_8U);CvMat* mask = cvCreateMat(gray_mat->rows, gray_mat->cols, CV_8U);// 計算各彩色通道的像素值cvSubRS(gray_mat, cvScalar(255), blue);	// blue(I) = 255 - gray(I)cvCopy(gray_mat, red);			// red(I) = gray(I)cvCopy(gray_mat, green);			// green(I) = gray(I),if gray(I) < 128cvCmpS(green, 128, mask, CV_CMP_GE );	// green(I) = 255 - gray(I), if gray(I) >= 128cvSubRS(green, cvScalar(255), green, mask);cvConvertScale(green, green, 2.0, 0.0);// 合成偽彩色圖cvMerge(blue, green, red, NULL, color_mat);cvReleaseMat( &red );cvReleaseMat( &green );cvReleaseMat( &blue );cvReleaseMat( &mask );}
}

7.?如何將視差數據保存為?txt?數據文件以便在?Matlab?中讀取分析?

由于OpenCV本身只支持 xml、yml 的數據文件讀寫功能,并且其xml文件與構建網頁數據所用的xml文件格式不一致,在Matlab中無法讀取。我們可以通過以下方式將視差數據保存為txt文件,再導入到Matlab中。

void saveDisp(const char* filename, const Mat& mat)		
{FILE* fp = fopen(filename, "wt");fprintf(fp, "%02d/n", mat.rows);fprintf(fp, "%02d/n", mat.cols);for(int y = 0; y < mat.rows; y++){for(int x = 0; x < mat.cols; x++){short disp = mat.at<short>(y, x); // 這里視差矩陣是CV_16S 格式的,故用 short 類型讀取fprintf(fp, "%d/n", disp); // 若視差矩陣是 CV_32F 格式,則用 float 類型讀取}}fclose(fp);
}

相應的Matlab代碼為:

function img = txt2img(filename)
data = importdata(filename);
r = data(1);    % 行數
c = data(2);    % 列數
disp = data(3:end); % 視差
vmin = min(disp);
vmax = max(disp);
disp = reshape(disp, [c,r])'; % 將列向量形式的 disp 重構為 矩陣形式
%  OpenCV 是行掃描存儲圖像,Matlab 是列掃描存儲圖像
%  故對 disp 的重新排列是首先變成 c 行 r 列的矩陣,然后再轉置回 r 行 c 列
img = uint8( 255 * ( disp - vmin ) / ( vmax - vmin ) );
mesh(disp);
set(gca,'YDir','reverse');  % 通過 mesh 方式繪圖時,需倒置 Y 軸方向
axis tight; % 使坐標軸顯示范圍與數據范圍相貼合,去除空白顯示區
顯示效果如下










本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/254977.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/254977.shtml
英文地址,請注明出處:http://en.pswp.cn/news/254977.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JavaEE 銀聯支付之網站支付-消費類交易

以銀聯網站支付 - 消費類交易 為例 0. 大致邏輯 前端request->后臺封裝參數->后臺進行簽名->生成跳轉頁面&#xff08;包含表單提交內容&#xff09;->響應前端&#xff08;將生成的html寫到瀏覽器中完成自動跳轉打開銀聯支付頁面&#xff09; 復制代碼1.acp_sdk.p…

react 開發知識準備

react react使用教程 babel babel 可用于ES6轉換為ES5&#xff0c;jsx轉換為原生js。 ES6 ES6 語法 webpack webpack打包工具&#xff0c;它把不同的、相互依賴的靜態資源都視作模塊&#xff0c;并且打包成我們想要的靜態資源。讓代碼組織更清晰&#xff0c;一個文件就是一個模…

Linux多線程編程(不限Linux)

——本文一個例子展開&#xff0c;介紹Linux下面線程的操作、多線程的同步和互斥。 前言 線程&#xff1f;為什么有了進程還需要線程呢&#xff0c;他們有什么區別&#xff1f;使用線程有什么優勢呢&#xff1f;還有多線程編程的一些細節問題&#xff0c;如線程之間怎樣同步、…

概率論與數理統計-ch8-假設檢驗

1、假設檢驗 在總體的分布函數未知或只知其形式、不知其參數的情況下&#xff0c;為了推斷總體的某些未知特性&#xff0c;提出關于總體的假設&#xff0c;然后根據樣本數據對提出的假設做出接受或拒絕的決策。 步驟&#xff1a; 提出原假設--確定建立在樣本基礎上的檢驗統計量…

HALCON示例程序measure_metal_part_first_example.hdev通過擬合邊緣進行尺寸測量

HALCON示例程序measure_metal_part_first_example.hdev通過擬合邊緣進行尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () read_image (Image, ‘metal-parts/metal-parts-01’) get_image_size (Image, Width, Height) dev_close…

簡單實現仿某寶地址選擇三級聯動樣式

內容簡單介紹實現步驟第一步 找準方向第二步 開干總結還是題外話內容簡單介紹 簡單看一下須要實現的效果&#xff0c;如圖&#xff1a; 實現步驟 第一步 找準方向 事實上就是想好要用recyclerview而不是listview。假設要問我recyclerview是什么的話。。 第二步 開干 首先須要先…

opencv雙目測距實現

雖然最近注意力已經不可遏制地被神經科學、大腦記憶機制和各種畢業活動吸引過去了&#xff0c;但是還是覺得有必要把這段時間雙目視覺方面的進展總結一下。畢竟從上一篇博文發表之后&#xff0c;很多同仁發E-mail來與我討論&#xff0c;很多原來的疑團&#xff0c;也在討論和一…

logback高級特性使用-異步記錄日志

注意&#xff1a;該功能需要高版本才能支持&#xff0c;如1.0.11。AsyncAppender&#xff0c;異步記錄日志。 工作原理&#xff1a; 當Logging Event進入AsyncAppender后&#xff0c;AsyncAppender會調用appender方法&#xff0c;append方法中在將event填入Buffer(這里選用的數…

Linux下c開發 之 線程通信(轉)

1.Linux“線程”進程與線程之間是有區別的&#xff0c;不過Linux內核只提供了輕量進程的支持&#xff0c;未實現線程模型。Linux是一種“多進程單線程”的操作系統。Linux本身只有進程的概念&#xff0c;而其所謂的“線程”本質上在內核里仍然是進程。大家知道&#xff0c;進程…

HDU 1028 Ignatius and the Princess III

//強行遞推。 xx[i][j]表示i數中第j個開頭的組合種類。 /* 最終結果[i]為 sum of(xx[i][j]) (j from 1 to i); xx[i][j]sum of (xx[i-j][k]) (k from 1 to j); 例如 xx[10][4]xx[6][1]xx[6][2]xx[6][3]xx[6][4]; xx[6][1] 1; 6111111; xx[6][2]3; 6222, 62211, 621111; xx[…

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格

HALCON示例程序measure_metal_part_id.hdev使用xld邊緣擬合檢測零件加工是否合格 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_off () Imagefiles : [‘metal-parts/metal-part-model-01’,‘metal-parts/metal-parts-01’,‘metal-parts/meta…

編寫批處理文件-------基礎

第一、Windows bat 批處理文件 編寫 如何編寫批處理文件 批處理文件&#xff08;batch file&#xff09;包含一系列 DOS命令&#xff0c;通常用于自動執行重復性任務。 用戶只需雙擊批處理文件便可執行任務&#xff0c;而無需重復輸入相同指令。編寫批處理文件非常簡單&#xf…

主控芯片

主控芯片&#xff1a; 主控芯片里有310&#xff0c;320,3288&#xff0c;288,318&#xff0c;333&#xff0c;345&#xff0c;7501, 其中310是中星微發展比較早&#xff0c;比較成熟的芯片。在現在一般應用在水晶夾子之類的低端產品上。 3288也是低端芯片&#xff0c;318&…

MPEG2、H.263、H.264協議效率對比

[摘錄]1.1 MPEG2、H.263、H.264協議效率對比ITUT中定義的雙向視頻通信協議族包括&#xff1a;H.320、H.323&#xff0c;這兩個協議族中&#xff0c;包含了很多子協議&#xff0c;例如音頻編碼協議、視頻編碼協議等&#xff0c;其中視頻編碼包括&#xff1a;H.261、H.263、H.264…

WebService SOAP、Restful和HTTP(post/get)請求區別

web service&#xff08;SOAP&#xff09; Webservice的一個最基本的目的就是提供在各個不同平臺的不同應用系統的協同工作能力。 Web service 就是一個應用程序&#xff0c;它向外界暴露出一個能夠通過Web進行調用的API。 SOAP是一種簡單基于xml的輕量協議&#xff0c;用戶web…

Block的循環引用詳解

1.首先我們創建了一個網絡請求工具類 然后storyboard里面去創建了一個導航控制器 并且把它設置為初始控制器 然后拖入一個bar button &#xff0d;&#xff0d;show&#xff0d;&#xff0d;到自帶的控制器 這個時候運行代碼的結果是 x 顯然這個時候沒有造成循環引用 為什…

HALCON示例程序measure_pump.hdev螺紋孔位置與尺寸測量

HALCON示例程序measure_pump.hdev螺紋孔位置與尺寸測量 示例程序源碼&#xff08;加注釋&#xff09; 關于顯示類函數解釋 dev_update_var (‘off’) dev_update_off () read_image (Image, ‘pumpe’) get_image_size (Image, Width, Height) dev_close_window () dev_open_…

計算機視覺和圖形學中的攝像機內參數矩陣詳解

在計算機視覺和圖形學中都有“攝像機內參數矩陣”這個概念&#xff0c;其含義大致相同&#xff0c;但在實際使用過程中&#xff0c;這兩個矩陣卻相差甚遠。在增強現實中&#xff0c;為了使計算機繪制的虛擬物體和真實環境圖像對其&#xff0c;需要令虛擬攝像機的內參數和真實攝…

c#和html方法互調

具體見連接&#xff1a;https://www.cnblogs.com/zeroLove/p/3912460.html轉載于:https://www.cnblogs.com/gaara-zhang/p/8746403.html

數據庫基礎雜記

sql,Structured Query Language結構化查詢語言。SQL 是一門 ANSI(美國國家標準局) 的標準計算機語言&#xff0c;用來訪問和操作數據庫系統。SQL 語句用于取回和更新數據庫中的數據。SQL 可與數據庫程序協同工作&#xff0c;比如 MS Access、DB2、Informix、MS SQL Server、Ora…