導航:首頁 > 源碼編譯 > 聯通域演算法

聯通域演算法

發布時間:2023-08-25 19:52:22

java代碼怎麼實現計算圖像二值連通區域的質心

一:幾何距(Geometric Moments)知識與質心尋找原理

1. Image Moments是圖像處理中非常有用的演算法,可以用來計算區域圖像的質心,方向等幾何特性,同時Mpq的高階具有旋轉不變性,可以用來實現圖像比較分類,正是因為Moments有這些特性,很多手繪油畫效果也會基於該演算法來模擬實現。它的數學表達為:

它的低階M00,M01, M10可以用來計算質心,中心化以後M11,M02,M20可以用來計算區域的方向/角度

2. 什麼是質心

就是通過該點,區域達到一種質量上的平衡狀態,可能物理學上講的比較多,簡單點的說就是規則幾何物體的中心,不規則的可以通過掛繩子的方法來尋找。

二:演算法流程

1. 輸入圖像轉換為二值圖像

2. 通過連通組件標記演算法找到所有的連通區域,並分別標記

3. 對每個連通區域運用計算幾何距演算法得到質心

4. 用不同顏色繪制連通區域與質心,輸出處理後圖像

三:演算法效果

左邊為原圖, 右邊藍色為連通組件標記演算法處理以後結果,白色點為質心

四:關鍵代碼解析

1. 計算幾何距演算法代碼

doublem00 = moments(pixels, width, height, 0, 0);

doublexCr = moments(pixels, width, height, 1, 0) / m00;// row

doubleyCr = moments(pixels, width, height, 0, 1) / m00;// column

return new double[]{xCr, yCr};

② 將一張圖二值化後,有很多連通區域,我想分別求出每一塊連通區域的面積,不知道有什麼好一點的演算法

圖像處理里有一種叫做Labeling處理的演算法。
可以把二值圖劃分區域,標出不同的區域編號。
只要計算每種編號的個數,就是對應區域的面積了。
如果沒看懂,不是演算法難,是我表達的不好。哈。

③ 我想用易語言填充畫板的指定區域 並計算填充了多少像素 怎麼計算

函數原型:BOOL ExtFloodFill(HDC hdc,int nXStart,int nYStart,COLORREF crColor,UINT fuFillType);
參數:
nXSTart:指定要開始填充處的邏輯X軸坐標。
nYStart:指定要開始填充處的邏輯Y軸坐標。
crColor:指定要填充的邊界或區域的顏色。crColor的具體解釋要根據參數fuFillType的值而定。
fuFillType:指定要進行的填充操作類型。該參數必須是下列值之一,這些值的含義如下:
FLOODFILLBORDER:表示填充區域是由crColor參數指定的顏色包圍起來的部分。這種形式與FloodFill函數執行的填充類型一樣。
FLOODFILLSURFACE:表示填充區域是由crColor指定的顏色來定義。填充操作向四周伸展,直到遇到這種顏色為止。這種操作式樣對於帶有多種顏色邊界的填充區域有用。
返回值:如果函數執行成功,那麼返回值為非零;如果函數執行失敗,那麼返回值為零。若想獲得更多錯誤信息,請調用GetLastError函數。
備註:下列原因可能引起函數執行失敗:
填充無法完成。
指定的像素點有著參數crColor(如果要求
操作樣式)指定的邊界顏色(即顏色相同)。
指定的像素點沒有參數crColor(如果要求FLOODFILLSURFACE操作樣式)指定的顏色。
該點在剪輯區之外――也就是說在設備中不可見。
如果fuFillType參數為FLOODFILLBORDER,那麼系統認為要填充的區域是完全被參數crColor指定的顏色包圍起來的。該函數從參數nXStart和nYStart指定的點開始填充,向四周繼續,直到遇到邊界為止。
如果fuFillType是FLOODRILLSURFACE,那麼系統就認為要填充的區域是單顏色的,函數從nXStart和nYStart兩個參數指定的點開始填充區域,並向四周延伸,對包含參數crColor指定顏色的所有相鄰區域進行填充。
只有支持光柵顯示操作的設備和內存設備環境才支持ExtFloodFill函數。為了確定設備是否支持該技術,可使用函數GetDeviceCaps。
http://ke..com/link?url=5RPNfKX08273wPGa
以上內容復制自網路
常量值
FLOODFILLBORDER =0
FLOODRILLSURFACE =1

種子填充演算法
編輯
種子填充演算法又稱為邊界填充演算法。其基本思想是:從多邊形區域的一個內點開始,由內向外用給定的顏色畫點直到邊界為止。如果邊界是以一種顏色指定的,則種子填充演算法可逐個像素地處理直到遇到邊界顏色為止。
種子填充演算法常用四連通域和八連通域技術進行填充操作。
從區域內任意一點出發,通過上、下、左、右四個方向到達區域內的任意像素。用這種方法填充的區域就稱為四連通域;這種填充方法稱為四向連通演算法。
從區域內任意一點出發,通過上、下、左、右、左上、左下、右上和右下八個方向到達區域內的任意像素。用這種方法填充的區域就稱為八連通域;這種填充方法稱為八向連通演算法。
一般來說,八向連通演算法可以填充四向連通區域,而四向連通演算法有時不能填充八向連通區域。例如,八向連通填充演算法能夠正確填充如圖2.4a所示的區域的內部,而四向連通填充演算法只能完成如圖2.4b的部分填充。
圖2.4 四向連通填充演算法
a) 連通域及其內點 b) 填充四連通域
四向連通填充演算法:
a) 種子像素壓入棧中;
b) 如果棧為空,則轉e);否則轉c);
c) 彈出一個像素,並將該像素置成填充色;並判斷該像素相鄰的四連通像素是否為邊界色或已經置成多邊形的填充色,若不是,則將該像素壓入棧;
d) 轉b);
e) 結束。
http://ke..com/link?url=jAM4UlhNMYk8__THzHZ2vN__KtQHm7CErVWq

要善用搜索

④ 如何判斷一個區域是否是連通的 matlab

matlab函數_連通區域

1、 matlab函數bwareaopen──刪除小面積對象
格式:BW2 = bwareaopen(BW,P,conn)
作用:刪除二值圖像BW中面積小於P的對象,默認情況下使用8鄰域。
演算法:
(1)Determine the connected components.
L = bwlabeln(BW, conn);
(2)Compute the area of each component.
S = regionprops(L, 'Area');
(3)Remove small objects.
bw2 = ismember(L, find([S.Area] >= P));

2、matlab函數bwarea──計算對象面積
格式:total = bwarea(BW)
作用:估計二值圖像中對象的面積。
註:該面積和二值圖像中對象的像素數目不一定相等。

3、matlab函數imclearborder──邊界對象抑制
格式:IM2 = imclearborder(IM,conn)
作用:抑制和圖像邊界相連的亮對象。若IM是二值圖,imclearborder將刪除和圖像邊界相連的對象。默認情況conn=8。
註:For grayscale images, imclearborder tends to rece the overall intensity level in addition to suppressing border structures.
演算法:
(1)Mask image is the input image.
(2)Marker image is zero everywhere except along the border, where it equals the mask image.

4、matlab函數bwboundaries──獲取對象輪廓
格式:B = bwboundaries(BW,conn)(基本格式)
作用:獲取二值圖中對象的輪廓,和OpenCV中cvFindContours函數功能類似。B是一個P×1的cell數組,P為對象個數,每個cell 是Q×2的矩陣,對應於對象輪廓像素的坐標。

5、matlab函數imregionalmin──獲取極小值區域
格式:BW = imregionalmin(I,conn)
作用:尋找圖像I的極小值區域(regional maxima),默認情況conn=8。
Regional minima are connected components of pixels with a constant intensity value, and whose external boundary pixels all have a higher value.

6、matlab函數bwulterode──距離變換的極大值
格式:BW2 = bwulterode(BW,method,conn)
作用:終極腐蝕。尋找二值圖像BW的距離變換圖的區域極大值(regional maxima)。用於距離變換的距離默認為euclidean,連通性為8鄰域。

7、regionprops統計被標記的區域的面積分布,顯示區域總數。
函數regionprops語法規則為:STATS = regionprops(L,properties)
該函數用來測量標注矩陣L中每一個標注區域的一系列屬性。
L中不同的正整數元素對應不同的區域,例如:L中等於整數1的元素對應區域1;L中等於整數2的元素對應區域2;以此類推。

返回值STATS是一個 長度為max(L(:))的結構數組,結構數組的相應域定義了每一個區域相應屬性下的度量。

Properties可以是由逗號分割的字元串列表、包含字元 串的單元數組、單個字元串'all'或者'basic'。如果properties等於字元串'all',則表4.1中的度量數據都將被計算;如果properties等於字元串'basic',則屬性:'Area','Centroid'和'BoundingBox'將被計算。表1就是所有有效的屬性字元串。

表1 屬性字元串列表----度量圖像區域的屬性或功能
'Area' 圖像各個區域中像素總個數
'BoundingBox' 包含相應區域的最小矩形
'Centroid' 每個區域的質心(重心)
'MajorAxisLength' 與區域具有相同標准二階中心矩的橢圓的長軸長度(像素意義下)
'MinorAxisLength' 與區域具有相同標准二階中心矩的橢圓的短軸長度(像素意義下)
'Eccentricity' 與區域具有相同標准二階中心矩的橢圓的離心率(可作為特徵)
'Orientation' 與區域具有相同標准二階中心矩的橢圓的長軸與x軸的交角(度)
'Image' 與某區域具有相同大小的邏輯矩陣
'FilledImage' 與某區域具有相同大小的填充邏輯矩陣
'FilledArea' 填充區域圖像中的on像素個數
'ConvexHull' 包含某區域的最小凸多邊形
'ConvexImage' 畫出上述區域最小凸多邊形
'ConvexArea' 填充區域凸多邊形圖像中的on像素個數
'EulerNumber' 幾何拓撲中的一個拓撲不變數——歐拉數
'Extrema' 八方向區域極值點
'EquivDiameter' 與區域具有相同面積的圓的直徑
'Solidity' 同時在區域和其最小凸多邊形中的像素比例
'Extent' 同時在區域和其最小邊界矩形中的像素比例
'PixelIdxList' 存儲區域像素的索引下標
'PixelList' 存儲上述索引對應的像素坐標

⑤ opencv如何標記連通區域 並且提取連通區域

代碼

1)Two-pass演算法的一種實現
說明:
基於OpenCV和C++實現,領域:4-領域。實現與演算法描述稍有差別(具體為記錄具有相等關系的label方法實現上)。

// Connected Component Analysis/Labeling By Two-Pass Algorithm
// Author: www.icvpr.com
// Blog : http://blog.csdn.net/icvpr
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <map>

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

void icvprCcaByTwoPass(const cv::Mat& _binImg, cv::Mat& _lableImg)
{
// connected component analysis (4-component)
// use two-pass algorithm
// 1. first pass: label each foreground pixel with a label
// 2. second pass: visit each labeled pixel and merge neighbor labels
//
// foreground pixel: _binImg(x,y) = 1
// background pixel: _binImg(x,y) = 0

if (_binImg.empty() ||
_binImg.type() != CV_8UC1)
{
return ;
}

// 1. first pass

_lableImg.release() ;
_binImg.convertTo(_lableImg, CV_32SC1) ;

int label = 1 ; // start by 2
std::vector<int> labelSet ;
labelSet.push_back(0) ; // background: 0
labelSet.push_back(1) ; // foreground: 1

int rows = _binImg.rows - 1 ;
int cols = _binImg.cols - 1 ;
for (int i = 1; i < rows; i++)
{
int* data_preRow = _lableImg.ptr<int>(i-1) ;
int* data_curRow = _lableImg.ptr<int>(i) ;
for (int j = 1; j < cols; j++)
{
if (data_curRow[j] == 1)
{
std::vector<int> neighborLabels ;
neighborLabels.reserve(2) ;
int leftPixel = data_curRow[j-1] ;
int upPixel = data_preRow[j] ;
if ( leftPixel > 1)
{
neighborLabels.push_back(leftPixel) ;
}
if (upPixel > 1)
{
neighborLabels.push_back(upPixel) ;
}

if (neighborLabels.empty())
{
labelSet.push_back(++label) ; // assign to a new label
data_curRow[j] = label ;
labelSet[label] = label ;
}
else
{
std::sort(neighborLabels.begin(), neighborLabels.end()) ;
int smallestLabel = neighborLabels[0] ;
data_curRow[j] = smallestLabel ;

// save equivalence
for (size_t k = 1; k < neighborLabels.size(); k++)
{
int tempLabel = neighborLabels[k] ;
int& oldSmallestLabel = labelSet[tempLabel] ;
if (oldSmallestLabel > smallestLabel)
{
labelSet[oldSmallestLabel] = smallestLabel ;
oldSmallestLabel = smallestLabel ;
}
else if (oldSmallestLabel < smallestLabel)
{
labelSet[smallestLabel] = oldSmallestLabel ;
}
}
}
}
}
}

// update equivalent labels
// assigned with the smallest label in each equivalent label set
for (size_t i = 2; i < labelSet.size(); i++)
{
int curLabel = labelSet[i] ;
int preLabel = labelSet[curLabel] ;
while (preLabel != curLabel)
{
curLabel = preLabel ;
preLabel = labelSet[preLabel] ;
}
labelSet[i] = curLabel ;
}

// 2. second pass
for (int i = 0; i < rows; i++)
{
int* data = _lableImg.ptr<int>(i) ;
for (int j = 0; j < cols; j++)
{
int& pixelLabel = data[j] ;
pixelLabel = labelSet[pixelLabel] ;
}
}
}

2)Seed-Filling種子填充方法
說明:
基於OpenCV和C++實現;領域:4-領域。

// Connected Component Analysis/Labeling By Seed-Filling Algorithm
// Author: www.icvpr.com
// Blog : http://blog.csdn.net/icvpr
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <map>
#include <stack>

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

void icvprCcaBySeedFill(const cv::Mat& _binImg, cv::Mat& _lableImg)
{
// connected component analysis (4-component)
// use seed filling algorithm
// 1. begin with a foreground pixel and push its foreground neighbors into a stack;
// 2. pop the top pixel on the stack and label it with the same label until the stack is empty
//
// foreground pixel: _binImg(x,y) = 1
// background pixel: _binImg(x,y) = 0

if (_binImg.empty() ||
_binImg.type() != CV_8UC1)
{
return ;
}

_lableImg.release() ;
_binImg.convertTo(_lableImg, CV_32SC1) ;

int label = 1 ; // start by 2

int rows = _binImg.rows - 1 ;
int cols = _binImg.cols - 1 ;
for (int i = 1; i < rows-1; i++)
{
int* data= _lableImg.ptr<int>(i) ;
for (int j = 1; j < cols-1; j++)
{
if (data[j] == 1)
{
std::stack<std::pair<int,int>> neighborPixels ;
neighborPixels.push(std::pair<int,int>(i,j)) ; // pixel position: <i,j>
++label ; // begin with a new label
while (!neighborPixels.empty())
{
// get the top pixel on the stack and label it with the same label
std::pair<int,int> curPixel = neighborPixels.top() ;
int curX = curPixel.first ;
int curY = curPixel.second ;
_lableImg.at<int>(curX, curY) = label ;

// pop the top pixel
neighborPixels.pop() ;

// push the 4-neighbors (foreground pixels)
if (_lableImg.at<int>(curX, curY-1) == 1)
{// left pixel
neighborPixels.push(std::pair<int,int>(curX, curY-1)) ;
}
if (_lableImg.at<int>(curX, curY+1) == 1)
{// right pixel
neighborPixels.push(std::pair<int,int>(curX, curY+1)) ;
}
if (_lableImg.at<int>(curX-1, curY) == 1)
{// up pixel
neighborPixels.push(std::pair<int,int>(curX-1, curY)) ;
}
if (_lableImg.at<int>(curX+1, curY) == 1)
{// down pixel
neighborPixels.push(std::pair<int,int>(curX+1, curY)) ;
}
}
}
}
}
}

3)顏色標記(用於顯示)

// Connected Component Analysis/Labeling -- Color Labeling
// Author: www.icvpr.com
// Blog : http://blog.csdn.net/icvpr
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <map>
#include <stack>

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

cv::Scalar icvprGetRandomColor()
{
uchar r = 255 * (rand()/(1.0 + RAND_MAX));
uchar g = 255 * (rand()/(1.0 + RAND_MAX));
uchar b = 255 * (rand()/(1.0 + RAND_MAX));
return cv::Scalar(b,g,r) ;
}

void icvprLabelColor(const cv::Mat& _labelImg, cv::Mat& _colorLabelImg)
{
if (_labelImg.empty() ||
_labelImg.type() != CV_32SC1)
{
return ;
}

std::map<int, cv::Scalar> colors ;

int rows = _labelImg.rows ;
int cols = _labelImg.cols ;

_colorLabelImg.release() ;
_colorLabelImg.create(rows, cols, CV_8UC3) ;
_colorLabelImg = cv::Scalar::all(0) ;

for (int i = 0; i < rows; i++)
{
const int* data_src = (int*)_labelImg.ptr<int>(i) ;
uchar* data_dst = _colorLabelImg.ptr<uchar>(i) ;
for (int j = 0; j < cols; j++)
{
int pixelValue = data_src[j] ;
if (pixelValue > 1)
{
if (colors.count(pixelValue) <= 0)
{
colors[pixelValue] = icvprGetRandomColor() ;
}
cv::Scalar color = colors[pixelValue] ;
*data_dst++ = color[0] ;
*data_dst++ = color[1] ;
*data_dst++ = color[2] ;
}
else
{
data_dst++ ;
data_dst++ ;
data_dst++ ;
}
}
}
}

4)測試程序

// Connected Component Analysis/Labeling -- Test code
// Author: www.icvpr.com
// Blog : http://blog.csdn.net/icvpr
#include <iostream>
#include <string>
#include <list>
#include <vector>
#include <map>
#include <stack>

#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

int main(int argc, char** argv)
{
cv::Mat binImage = cv::imread("../icvpr.com.jpg", 0) ;
cv::threshold(binImage, binImage, 50, 1, CV_THRESH_BINARY_INV) ;

// connected component labeling
cv::Mat labelImg ;
icvprCcaByTwoPass(binImage, labelImg) ;
//icvprCcaBySeedFill(binImage, labelImg) ;

// show result
cv::Mat grayImg ;
labelImg *= 10 ;
labelImg.convertTo(grayImg, CV_8UC1) ;
cv::imshow("labelImg", grayImg) ;

cv::Mat colorLabelImg ;
icvprLabelColor(labelImg, colorLabelImg) ;
cv::imshow("colorImg", colorLabelImg) ;
cv::waitKey(0) ;

return 0 ;
}

⑥ NI Vision:二值圖像連通域標記演算法

前面說到,要使用Labwindows + NI Vision(IMAQ Vision)這套商用開發框架來做數圖課設。很明顯,這套虛擬儀器開發平台由NI Instrument(美國國家儀器公司)開發的。大名鼎鼎的Labview軟體就是這個公司開發的。相比較而言,Labwindows使用ANSI C開發,但應用場景是差不多的。

在做課程作業的時候,遇到了一個很有趣的應用。輸入是米粒,比背景灰度要低,目的是輸出米粒的顆數、面積、周長和孔數,這是工業上的一個很常見的應用。具體處理過程是二值化後使用低通濾波,並計算各種性質。

界面設計如下,可以看到米粒的詳細情況。

讓我感興趣的,是通過怎樣的演算法能夠得到米粒的數量?之前曾經用過OpenCV中找最大外界矩形這個函數,但沒有具體了解演算法實現。直覺告訴我原理應該是相似的。

可以看到,每一個米粒之間都是不連通的。這里就就提出了一個概念。 連通區域(Connected Component) 是指圖像中相鄰並有相同像素值的圖像區域。 連通區域分析(Connected Component Analysis,Connected Component Labeling) 是指將圖像中的各個連通區域找出並標記。

二值圖像分析最重要的方法就是連通區域標記,它是所有二值圖像分析的基礎,它通過對二值圖像中白色像素(目標)的標記,讓每個單獨的連通區域形成一個被標識的塊,進一步的我們就可以獲取這些塊的輪廓、外接矩形、質心、不變矩等幾何參數。如果要得到米粒的數量,那麼通過連通區域分析(這里是二值圖像的連通區域分析),就可以得到標記的數量,從而得到米粒的數量。

下面這幅圖中,如果考慮4鄰接,則有3個連通區域,8鄰接則是2個。

從連通區域的定義可以知道,一個連通區域是由具有相同像素值的相鄰像素組成像素集合,因此,我們就可以通過這兩個條件在圖像中尋找連通區域,對於找到的每個連通區域,我們賦予其一個唯一的 標識(Label) ,以區別其他連通區域。

連通區域分析的基本演算法有兩種:1)Two-Pass兩便掃描法 2)Seed-Filling種子填充法 。

兩遍掃描法(Two-Pass),正如其名,指的就是通過掃描兩遍圖像,就可以將圖像中存在的所有連通區域找出並標記。

說了一堆數學語言,其實用圖很好理解

種子填充方法來源於計算機圖形學,常用於對某個圖形進行填充。它基於區域生長演算法。至於區域生長演算法是什麼,可以參照我的這篇 文章 。

同樣的,上動圖

NI Vision 中的運算元定義如下

OpenCV中也有相應的運算元

這里參照其他博客實現一下Two-Pass演算法,Seed-Filling演算法就偷懶不搞了。

Reference:
OpenCV實現圖像連通組件標記與分析
OpenCV-二值圖像連通域分析
數字圖像處理技術 ——鄧繼忠(我的任課老師)

⑦ 簡述邊界表示的四連通區域的種子填充演算法的基本思想和執行步驟

一、種子填充演算法思想:
首先填充種子所在的尚未填充的一區段,然後確定與這一區段相鄰的上下兩條掃描線上位於該區段內是否存在需要填充的新區段,如果存在,則依次把每個新區段最右端的象素作為種子放入堆棧。反復這個過程,直到堆棧為空。
二、種子填充演算法步驟:
1、初始化堆棧。
2、種子壓入堆棧。
3、While(堆棧非空)從堆棧彈出種子象素。

⑧ matlab bwboundaries 函數思想原理

只不是一個簡單的問題
首先要明白這個函數是給出二值圖像的邊界
二值圖像就是數值只有0和1兩種值的圖像,或者叫邏輯真或假
其邊界,就是0和1數據的交接出,一般是求數據為1的區域的邊界

由於圖像中本身數據為一的區域可能不止一塊
所以最用邊界也可能不止一條,連在一起的一個全是1的區域,我們叫它做連通域
所以本身這個問題,可以分為兩個子問題
第一,求圖像的連通域
第二,求每個連通域的邊界

這兩個問題都不是簡單用一兩句語句就能解決的
對於第一個問題,matlab有bwlable函數標記每個連通域
而bwlable函數的具體工作代碼,matlab沒有給出
關鍵的函數的源代碼,matlab是保密的,所以不確切知道其所用的演算法
而具體的思想,是掃描矩陣,然後合拼互相連接的區域
你可以搜索 二值圖像 連通域 看看,有很多種演算法,效率各不相同,不知道matlab用的哪種

第二個問題,也不是個簡單的問題
在matlab內部bwboundaties函數首先是調用bwlable解決第一個問題的
而第二個問題又調用了一個內部的不提供源代碼的函數,所以具體演算法也不得而知
實際上連通域問題解決後,在單一連通域上提取邊界也不算太難
比較麻煩的是,在連通域中有洞的情況下,一個連通域也可能有多個邊界
一個對外的邊界,和若干個內部洞洞的邊界

如果是有心想學習演算法,最好多找資料看看。
如果只是想了解一下,嘗試自己編著玩玩,沒有很硬行的規定需要
還是用系統提供的現成函數好了,自己編的即便運行無誤多半效率不及系統提供的

閱讀全文

與聯通域演算法相關的資料

熱點內容
程序員相親被刪除微信 瀏覽:790
centos命令窗口 瀏覽:596
編譯器有幾個好用的 瀏覽:500
資料庫和網站如何搭載伺服器 瀏覽:154
網路流理論演算法與應用 瀏覽:795
java和matlab 瀏覽:388
釘釘蘋果怎麼下app軟體 瀏覽:832
php網站驗證碼不顯示 瀏覽:859
鋁膜構造柱要設置加密區嗎 瀏覽:344
考駕照怎麼找伺服器 瀏覽:884
阿里雲伺服器如何更換地區 瀏覽:972
手機app調音器怎麼調古箏 瀏覽:503
銳起無盤系統在伺服器上需要設置什麼嗎 瀏覽:19
紅旗計程車app怎麼應聘 瀏覽:978
如何編寫linux程序 瀏覽:870
吉利車解壓 瀏覽:248
java輸入流字元串 瀏覽:341
安卓軟體沒網怎麼回事 瀏覽:785
dvd壓縮碟怎麼導出電腦 瀏覽:275
冒險島什麼伺服器好玩 瀏覽:543