精华内容
下载资源
问答
  • 用图像分割之最大连通域算法得到最大轮廓矩形框,再使用grabcut分割:#include<opencv2\opencv.hpp> #include<cmath> using namespace cv; using namespace std; int main() { Mat ...

    用图像分割之最大连通域算法得到最大轮廓矩形框,再使用grabcut分割:

    #include<opencv2\opencv.hpp>  
    #include<cmath>  
      
    using namespace cv;  
    using namespace std;  
      
    int main()  
    {  
        Mat srcImage = imread( "test_image.png" ,0);  
        if( !srcImage.data )  
        {  
            cout << "读取失败" << endl;  
            return 0;  
        }  
    namedWindow( "原始图", CV_WINDOW_NORMAL ); 
        imshow( "原始图" , srcImage );  
      Mat dstImage;
        // threshold只针对二值化图像  
       threshold( srcImage , dstImage ,228.0 , 255.0 ,CV_THRESH_BINARY|CV_THRESH_OTSU );
       namedWindow( "dstImage", CV_WINDOW_NORMAL ); 
        imshow( "dstImage" , dstImage );  
      //threshold(srcImage, srcImage,27, 255, CV_THRESH_BINARY);


        vector<vector<Point>> contours;  
        vector<Vec4i> hierarchy;  
      
        findContours( dstImage , contours , hierarchy , CV_RETR_CCOMP , CV_CHAIN_APPROX_SIMPLE );  
      
        vector<Point> maxcontours ;   //最大轮廓  
        double maxArea = 0;  
      
    //  vector<vector<Point>>::const_iterator itContours = contours.begin();  
        for( size_t i = 0; i < contours.size();i++ )  
        {  
            double area = contourArea( contours[i] );  
            if( area > maxArea )  
            {  
                maxArea = area;  
                maxcontours = contours[i];  
            }  
        }  
      
        Rect maxRect = boundingRect( maxcontours );  //查找矩形框  
      
        Mat result1 , result2;  
      
        dstImage.copyTo( result1 );  
        dstImage.copyTo( result2 );  
      
        for( size_t i = 0; i < contours.size(); i++ )  
        {  
            Rect r = boundingRect( contours[i] );  
            rectangle( result1 , r , Scalar( 255 ) );  
        }  
    namedWindow( "all regions", CV_WINDOW_NORMAL ); 
        imshow( "all regions" , result1 );  
        waitKey(100);  
      
        rectangle( result2 , maxRect , Scalar(255 ) );  
    namedWindow( "largest regions", CV_WINDOW_NORMAL ); 
        imshow( "largest regions" , result2 );  
        waitKey(100);


    Mat srcMarks,temp,img0;
        temp = imread("test_image.png"); 
    //namedWindow("原图",CV_WINDOW_NORMAL);
       // imshow("原图", temp); 
    //resize(temp,img,Size(temp.cols/2,temp.rows/2),0,0,INTER_LINEAR);
    // namedWindow("resize",CV_WINDOW_NORMAL);
    // imshow("resize", img); 
    img0 = temp.clone();
    int cols=temp.cols, rows=temp.rows;
    temp.copyTo(srcMarks);
    cv::rectangle(srcMarks, maxRect, cv::Scalar(255, 0, 0),1,1,0);



    Mat result; // 4种可能结果  
        Mat bgModel, fgModel; // 背景/前景 
    grabCut(srcMarks, result, maxRect, bgModel, fgModel, 5, GC_INIT_WITH_RECT);  
                compare(result,GC_PR_FGD,result,CMP_EQ);//得到前景mask  
                Mat foreground(temp.size(),CV_8UC3,Scalar::all(255));  
                img0.copyTo(foreground,result); 
    namedWindow("grabcut",CV_WINDOW_NORMAL);
                imshow("grabcut",foreground);

         waitKey();      
    }  
    展开全文
  • OpenCV获取联通区域轮廓

    千次阅读 2018-06-06 09:28:10
    检测联通区域,主要是利用opencv的findContours函数来获取连通域的外轮廓点的集合,然后可以用drawContours来描绘这些点。需要注意的是,findContours函数的输入图像必须是单通道二值图的格式。此外,在很多情况下...
    检测联通区域,主要是利用opencv的findContours函数来获取连通域的外轮廓点的集合,然后可以用drawContours来描绘这些点。需要注意的是,findContours函数的输入图像必须是单通道二值图的格式。
    此外,在很多情况下我们需要获取连通域的最小外接矩形,使用boundingRect函数配合findContours函数来使用即可达到目的。
    代码如下:
    1. #include "stdafx.h"  
    2. #include <opencv2\opencv.hpp>  
    3. #include <iostream>  
    4. #include <vector>  
    5.   
    6. using namespace cv;  
    7. using namespace std;  
    8.   
    9. int _tmain(int argc, _TCHAR* argv[])  
    10. {  
    11.     Mat srcimage, grayimage, dstimage;  
    12.   
    13.     // RGB原图  
    14.     srcimage = imread("D:\\image.jpg");  
    15.   
    16.     // 灰度图并二值化  
    17.     cvtColor(srcimage, grayimage, CV_RGB2GRAY);  
    18.     threshold(grayimage, dstimage, 200, 255, THRESH_BINARY_INV);  
    19.   
    20.     // 搜索连通域轮廓  
    21.     vector<std::vector<cv::Point>> contours;  
    22.     vector<Vec4i> hierarchy;  
    23.     findContours(dstimage, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE);   
    24.     drawContours(srcimage, contours, -1, Scalar(0, 0, 255), 2); //> 在RGB图像画出轮廓  
    25.   
    26.     // 最小外接矩形  
    27.     for (int index = 0; index >= 0; index = hierarchy[index][0])  
    28.     {  
    29.         // 若图像内不存在联通域,则不进行后去步骤  
    30.         if (contours.size() == 0)  
    31.         {  
    32.             break;  
    33.         }  
    34.   
    35.         // 最小外接矩形  
    36.         Rect rect = boundingRect(contours[index]);  
    37.         rectangle(srcimage, rect, Scalar(255, 0, 0), 2, 8, 0);  
    38.         imshow("【srcimage】", srcimage);  
    39.         imwrite("D:\\dst.jpg", srcimage);  
    40.         waitKey(0);  
    41.     }  
    42.   
    43.     return 0;  
    44. }  
    待检测的原图:
    OpenCV获取联通区域轮廓 - 四片叶子的三叶草 - Trifolium Linn
    得到的连通域轮廓:
     
    OpenCV获取联通区域轮廓 - 四片叶子的三叶草 - Trifolium Linn
    连通域最小外接矩形:(如果只想要矩形框,可以注销掉drawContours函数,则不会画出连通域轮廓
     
    OpenCV获取联通区域轮廓 - 四片叶子的三叶草 - Trifolium Linn
     

    展开全文
  • opencv之7.5提取联通区域的轮廓

    千次阅读 2017-10-23 22:57:19
    提取白色区域的轮廓void findContours( InputOutputArray image, OutputArrayOfArrays contours, int mode, int method, Point offset = Point()); 第一个参数:image但更常用的是二值图像,一般是经过Canny、...

    提取白色区域的轮廓

    void findContours( InputOutputArray image, OutputArrayOfArrays contours,
                                  int mode, int method, Point offset = Point());
    第一个参数:image但更常用的是二值图像,一般是经过Canny、拉普拉斯等边缘检测算子处理过的二值图像,提取白色的轮廓;
    第二个参数:contours,定义为“vector<vector> contours”,是一个向量,并且是一个双重向量,向量内每个元素保存了一组由连续的Point点构成的点的集合的向量,每一组Point点集就是一个轮廓。有多少轮廓,向量contours就有多少元素。
            contours.size()给出了轮廓的数量
    第三个参数:hierarchy,定义为“vector<Vec4i> hierarchy”,先来看一下Vec4i的定义:
               typedef    Vec<int, 4>   Vec4i;                                                                                                                                       
               Vec4i是Vec<int,4>的别名,定义了一个“向量内每一个元素包含了4int型变量”的向量。 所以从定义上看,hierarchy也是一个向量,向量内每个元素保存了一个包含4int整型的数组。 向量hiararchy内的元素和轮廓向量contours内的元素是一一对应的,向量的容量相同。 hierarchy向量内每一个元素的4int型变量——hierarchy[i][0] ~hierarchy[i][3],分别表示第 i个轮廓的后一个轮廓、前一个轮廓、父轮廓、内嵌轮廓的索引编号。如果当前轮廓没有对应的后一个轮廓、前一个轮廓、父轮廓或内嵌轮廓的话,则hierarchy[i][0] ~hierarchy[i][3]的相应位被设置为默认值-1
    第四个参数:int型的mode,定义轮廓的检索模式:
            取值一:CV_RETR_EXTERNAL只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略
            取值二:CV_RETR_LIST   检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓,所以hierarchy向量内所有元素的第3、第4个分量都会被置为-1,具体下文会讲到
            取值三:CV_RETR_CCOMP  检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层
            取值四:CV_RETR_TREE, 检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
    
    第五个参数:int型的method,定义轮廓的近似方法:
            取值一:CV_CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量内         
            取值二:CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内,拐点与拐点之间直线段上的信息点不予保留取值三和四:CV_CHAIN_APPROX_TC89_L1,CV_CHAIN_APPROX_TC89_KCOS使用teh-Chinl chain 近似算法
    第六个参数:Point偏移量,所有的轮廓信息相对于原始图像对应点的偏移量,相当于在每一个检测出的轮廓点上加上该偏移量,并且Point还可以是负值!
    画出轮廓:
    save_snippets.png

    drawContours( InputOutputArray image, InputArrayOfArrays contours,
    int contourIdx, const Scalar& color,
    int thickness = 1, int lineType = LINE_8,
    InputArray hierarchy = noArray(),
    int maxLevel = INT_MAX, Point offset = Point() );
    第三个参数contourIdx指明画第几个轮廓,如果该参数为负值,则画全部轮廓
    代码:

    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>
    int main()
    {
        cv::Mat image = cv::imread("D:/animal.jpg", 0);
        cv::Mat binary;
        cv::threshold(image, binary, 120, 255, cv::THRESH_BINARY_INV);
        cv::namedWindow("binary");
        cv::imshow("binary", binary);
        std::vector<std::vector<cv::Point>> contours;
        cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
        cv::Mat result(image.size(), CV_8U, cv::Scalar(255));
        cv::drawContours(result, contours, -1, cv::Scalar(0), 2);
        cv::namedWindow("contours");
        cv::imshow("contours", result);
        cv::waitKey(0);
        return 0;
    }
    save_snippets.png

    提取联通的原理:系统地扫描图像直到遇到联通区域的第一个点,以它为起始点,跟踪它的轮廓,标记边界上的像素点。当轮廓闭合时,扫描回到上一个位置,直到发现新的成分。同时也可以使用周长极大值和极小值来筛选联通区域。
    代码:

    #include <opencv2/core/core.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>
    
    int main()
    {
        cv::Mat image = cv::imread("D:/animal.jpg", 0);
        cv::Mat binary;
        cv::threshold(image, binary, 120, 255, cv::THRESH_BINARY_INV);
        cv::namedWindow("binary");
        cv::imshow("binary", binary);
        std::vector<std::vector<cv::Point>> contours;
        cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_NONE);
        cv::Mat result(image.size(), CV_8U, cv::Scalar(255));
        cv::drawContours(result, contours, -1, cv::Scalar(0), 2);
        cv::namedWindow("contours");
        cv::imshow("contours", result);
        std::vector<std::vector<cv::Point>>::iterator it = contours.begin();
        while (it != contours.end())
        {
            if (it->size() < 200)
            {
                it = contours.erase(it);
            }
            else
            {
                ++it;
            }
        }
        cv::Mat result1(image.size(), CV_8U, cv::Scalar(255));
        cv::drawContours(result1, contours, -1, cv::Scalar(0), 2);
        cv::namedWindow("contours1");
        cv::imshow("contours1", result1);
        cv::waitKey(0);
        return 0;
    }
    save_snippets.png
    展开全文
  • 联通区域标记(Connected Component Labeling)是图像处理里面常用的一个技术,它是用来检测二值图像中联通的区域,在许多跟踪检测算法中充当目标区域检测的作用。常见的CCL(Connected Component Labeling)包括Two-...

    联通区域标记(Connected Component Labeling)是图像处理里面常用的一个技术,它是用来检测二值图像中联通的区域,在许多跟踪检测算法中充当目标区域检测的作用。常见的CCL(Connected Component Labeling)包括Two-Pass的方法和One-Pass的方法,这里pass就是扫描的遍数,Two-Pass就是扫描两遍的算法,One-Pass就是扫描一遍的算法。下面仅就这两类算法中有代表性的算法做一个简单的介绍。

    Two-Pass

    传统的Two-Pass:

    逐行扫描图像上的点,检查每个点是否是前景点,如果不是,继续扫描;

    检查该前景点的左边的点和上边的点 如果有一个为前景点,则为当前扫描点标记和此点相同编号;

    如果两个都是前景点,则选择标号小的,为当前扫描点标记编号;这里注意如果两个都是前景点且标号不同,需要把标号小的点设为标号大的点的父节点,以方便第二遍扫描的时候用并查集算法(参考 利用不相交集实现等价元素的聚类

    )合并;

    如果都不是,则赋值目前标号label,label++(label初始值为零);

    再次扫描图像,利用并查集算法合并联通的不同的label的区域。

    run-based的Two-pass:

    该算法定义每一行联通的一个区域叫做 run

    ,把run看成一个整体,逐行搜寻时,完成一个run扫描好后再进行整个run的标记,标记的准则是按照上一行是否有run和自己联通来判断如何标记当前的run;

    每个run有两个label:representative label和一个provisional label,这里我们用R和P表示。当出现上一行n个run联通当前行的run的时候,更改n个run的R为最小的R,我们设为Rmin,同时标记当前run的P和R为Rmin;

    该算法的优势在于减少了第一遍扫描时标号的数量,从而减少了第二遍中联通区域的合并任务。具体算法可以参考 “A Run-Based Two-Scan Labeling Algorithm”

    One-Pass

    基于区域生长的方法

    单次扫描的算法有一种基于区域生长的联通区域标记算法,基本的思路可以参考博客 二值图像连通区标记之区域生长法

    。为防止链接失效,这里简单描述下流程:

    输入待标记图像bitmap,初始化一个与输入图像同样尺寸的标记矩阵labelmap,一个队列queue以及标记计数labelIndex;

    按从左至右、从上至下的顺序扫描bitmap,当扫描到一个未被标记的前景像素p时,labelIndex加1,并在labelmap中标记p(相应点的值赋为labelIndex),同时,扫描p的八邻域点,若存在未被标记的前景像素,则在labelmap中进行标记,并放入queue中,作为区域生长的种子;

    当queue不为空时,从queue中取出一个生长种子点p1,扫描p1的八邻域点,若存在未被标记过的前景像素,则在labelmap中进行标记,并放入queue中;

    重复3直至queue为空,一个连通区标记完成;

    转到2,直至整幅图像被扫描完毕,得到标记矩阵labelmap和连通区的个数labelIndex。

    基于轮廓跟踪的方法

    还有一种经典的单次扫描的的算法是由台湾的中央研究院资讯科学研究所的 张复

    提出的,源代码可以在其 实验室网站

    下载到,而且OpenCV的Wiki网站还有专门一个库 cvBlobsLib

    ,就是实现的这个算法。算法的详细介绍可以参考 “A Linear-Time Component-Labeling Algorithm Using Contour Tracing Technique”

    ,这里作一个简单的介绍。

    逐行扫描图像,设当前像素为P

    如果P为为背景点,则继续,直到扫描到前景点;

    如果P是 unlabeled

    的,且正上方的像素为背景像素(如图1所示),认为p是一个新遇见的 外轮廓

    的起点,然后以P为起点,开始进行contour tracing跟踪外轮廓,为该轮廓上的所有点标记为新的的标号C,然后C=C+1;

    图 1

    如果P的正下方的像素是 unmarked

    (这里marked是指在contour tracing中外围轮廓周围的背景点会被mark)的背景像素。这里有两种情况:如果p是labeled的(如图2所示),则P既是外轮廓点,又是内轮廓点;如果P是unlabled的(如图3所示),则P左边的点N一定是labeled,则设置P和N相同的标号。无论是那种情况,都以P为起点进行contour tracing跟踪内轮廓,并把轮廓上所有的点标记和P相同的标号。

    图 2

    图 3

    如果P不是以上两种情况,即P不是轮廓点,则P的左边点N一定是标记点,把P标记成和N相同标号即可。

    Contour tracking

    当遇到一个外轮廓或是内轮廓的起点时,首先通过 Tracker

    搜寻轮廓的下一个点,直到输出点又一次为起点位置,从而实现轮廓的跟踪。

    Tracker

    如图4所示,Tracker的目的是搜寻当前点P周围八邻域的点,找到轮廓的下一个点。按照顺时针方向搜寻,对于一个外轮廓的起点,其起始搜寻点为7,因为6已经知道是个背景点,而对于一个内轮廓点,其起始搜寻点为3,因为2已经知道是个背景点。对于轮廓上的任意一个点,其下一个点的搜寻起始位置为(d+2) mod 8, 这里d是当前点的前一点的在当前的八邻域的位置,如图5所示。一旦起始搜寻点确定,按照顺时针方向搜寻第一个前景点就是下一个轮廓的点。但是cvBlobsLib上的实现方法是采用逆时针搜寻的方式,所以代码上和原论文中稍有不同。

    图 4

    图 5

    总结

    以上仅是我这几天查阅文献得到的一个初步总结,所以难免有疏漏,这里记下来仅仅是做个笔记,以备后来查阅。对于轮廓的检测在OpenCV中也有相应的函数findContours,这里列出供参考。

    展开全文
  • OCR 文字特征提取

    千次阅读 2017-03-08 17:58:55
    作为OCR系统的第一步,特征提取是希望找出图像中候选的文字区域特征,以便我们在第二步进行文字定位和第三步进行识别....传统的文本分割思路大多数是“边缘检测 + 腐蚀膨胀 + 联通区域检测”,如论文[1]. 然而,在复
  • 以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全置为0,然后通过其它方法找到目标的外接矩形并分割,在此选择一张前景和背景相差较大的图片作为示例。...
  • 以下介绍几种基于opencv的单目标检测算法,算法总体思想先尽量将目标区域的像素值全置为1,背景区域全置为0,然后通过其它方法找到目标的外接矩形并分割,在此选择一张前景和背景相差较大的图片作为示例。...
  • 先对图像进行预处理,均衡化平滑滤波,二值化处理,在原图上画上网格。 % 将图像边上一圈方格去除掉,使背景部分尽量最小化 % 标记联通区域,找到面积最大的区域就是人脸区域
  • 要求:在图片中找到火车票,将火车票检测出来同时将...2、圈出联通区域 3、将符合要求的连通域提取出来 4、形态学操作 5、Hough直线检测去除无关直线 6、求取车票的四个角的坐标 7、透视变换得到变换后的图
  • 3、进行联通区域处理; 二、霍夫圆变换 opencv-python提供了HoughCircles函数来完成圆形检测及变换。 cv2.HoughCircles(gray,cv2.HOUGH_GRADIENT,1,50,param1=80,param2=30,minRadius=15,maxRadi
  • python-opencv实现单目标检测一 简介二 背景前景分离1 灰度+二值+形态学 轮廓特征和联通组件2 Kmeans聚类实现前景和背景的分离三 模板匹配 一 简介 目标检测即为在图像中找到自己感兴趣的部分,将其分割出来进行下...
  • C/C++之四联通问题

    2020-05-01 16:20:25
    可以想象一张地图,不同的区域被染成了不同的颜色。现在我们需要判断图中任意两点是否在同一个连通区间中。 输入: 整数N(N<50),代表矩阵的行列数 输入N行,每行N个字符,代表矩阵中的元素 输入一个整数M(M&...
  • 连通区域合并问题【2】

    千次阅读 2012-03-02 15:19:54
    扫描一帧图像的每一个联通区轮廓,对于满足一定要求的连通区域进行合并。 这个问题的背景是我要做一个道路场景下车辆检测跟踪。通过运动目标检测提取出运动前景,运动前景foremask中车辆的区域不完整,可能被分成很...
  • 分析:识别条形码与车牌类似,检测出图片中的垂直边缘并进行开操作从而形成联通区域,再进行腐蚀膨胀处理以便对条形码位置有更精准的定位。车牌识别可以根据长宽比来筛选,而条形码有不同规格则条形码长宽比不能成为...
  •  漫水填充法是一种用特定的颜色填充联通区域,通过设置可连通像素的上下限以及连通方式来达到不同的填充效果的方法。漫水填充经常被用来标记或分离图像的一部分以便对其进行进一步处理或分析,也可以用来从输入图像...
  • 第一步,合理规划地址,配置IP地址(检测直连联通互相ping,排除地址手配出错) 第二,左边r1,r2,r3,网络类型为mgre网络r8为模拟运营商 r1为hub端r2,r3为spoke端 配置hub-spoke网络结构 1.r1 r2,r3写缺省路由指向运营...
  • 这一节讲traceedge函数,从字面翻译,显然和边缘痕迹相关,也有人叫他染色嵌套函数,借用别人的指点,这种编程方法对图像中具有相同性质(灰度值等)的联通区域进行染色操作是很有用的。 是的正是这个traceedge函数...
  • 大致时间:研一到研三研究方向:图像处理项目包括:1、(MATLAB)分割计数,分割与联通区域分析;2、(MATLAB)指纹识别,利用gobar特征加SVM分类器;3、(MATLAB)水印的提取与嵌入;4、(MATLAB)啤酒瓶盖的缺陷...
  • SLAM就业问题汇总复习

    千次阅读 2019-09-03 23:20:51
    4.二值图,最大联通区域。 5.梯度下降法,牛顿法和高斯牛顿法优劣。 6.边缘检测算子。Canny,Sobel,Laplace。 7.BA算法的流程。 8.SVO中深度滤波器原理。 9.某个SLAM框架工作原理,优缺点,改进。 10.Ransac...
  • 通常用递归来实现使用栈保存未被遍历的结点,结点按照深度优先的次序被访问并被压入栈中,并以相反的次序出栈应用:走迷宫,查找环路,查找联通区域 BFS 思想:先遍历所有的兄弟节点再遍历子节点,按层遍历。...
  • 2)blob提取,实现了联通区域查找,求取团块的质心大小。 3)blob跟踪,实现了不同的跟踪算法,如meanshift,质心跟踪等。 4)轨迹处理,就是kalman滤波等轨迹平滑模块。   2. 接口...
  • 如果把一个k*k大小的区域内的点都变成联通块,那么这个网格图中最大的连通块是多大 解法: 这个如果用暴力枚举的话,是O(N4)O(N^4)的,但是我们可以用滑动窗口来优化,我们首先把每一个连通块的大小求出来,然后...
  • DMA分区计量系统

    2021-02-19 16:44:57
    据公司生产技术部部长陈贤晓解释,小区供水管网是联通的,通过技术改造,在现有自来水管网中加装独立的开关阀门,让每个小区域独立出来,就可以使自来水管线形成相对封闭的区域,再通过在进水口设置流量计
  • Server01-U=联通1 Server02-T=电信1 Server03-T=电信2 OSD position:=OSD位置: LEFT_TOP=左上 LEFT_BOTTOM=左下 RIGHT_TOP=右上 RIGHT_BOTTOM=右下 HIDE=隐藏 ;视频管理 IPCam Setting=摄像机设置 Ok=确定 Cancel=...

空空如也

空空如也

1 2
收藏数 24
精华内容 9
关键字:

联通区域检测