Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带虚线或虚线的opencv矩形_Python_Opencv_Computer Vision_Draw_Drawrectangle - Fatal编程技术网

Python 带虚线或虚线的opencv矩形

Python 带虚线或虚线的opencv矩形,python,opencv,computer-vision,draw,drawrectangle,Python,Opencv,Computer Vision,Draw,Drawrectangle,我这里有一行代码使用opencv的python绑定: cv2.rectangle(img, (box[1], box[0]), (box[3], box[2]), (255,0,0), 4) 这将在厚度为4的图像img上绘制一个红色矩形 但是有没有一种方法可以将矩形的线条风格化呢?不太多。只是虚线,或虚线,真的就是这样 OpenCV(目前)不支持厚度和抗锯齿以外的线条属性。 openCV是一个开源库,所以您可以找到绘图的源代码并对其进行轻微修改 您可以在几行代码中使用并获得您想要的任何样式 v

我这里有一行代码使用opencv的python绑定:

cv2.rectangle(img, (box[1], box[0]), (box[3], box[2]), (255,0,0), 4)
这将在厚度为
4
的图像
img
上绘制一个红色矩形

但是有没有一种方法可以将矩形的线条风格化呢?不太多。只是虚线,或虚线,真的就是这样

OpenCV(目前)不支持厚度和抗锯齿以外的线条属性。

  • openCV是一个开源库,所以您可以找到绘图的源代码并对其进行轻微修改
  • 您可以在几行代码中使用并获得您想要的任何样式

    void lineDot(OutputArray img, const Point& pt1, const Point& pt2, const Scalar& color, const vector<bool>& pattern){
        LineIterator it(img.getMat(), pt1, pt2, LINE_8); // LINE_AA is not supported here
        for(auto i=0; i<it.count; i++, it++){
            if(pattern[i%pattern.size()]){ // use any pattern of any length, dotted is {0,0,1}, dashed is {0,0,0,1,1,1} etc
                (*it)[0] = color.val[0];
                (*it)[1] = color.val[1];
                (*it)[2] = color.val[2];
            }
        }
    }
    
    void lineDot(输出阵列img、常量点和pt1、常量点和pt2、常量标量和颜色、常量向量和图案){
    LineIterator it(img.getMat(),pt1,pt2,LINE_8);//这里不支持LINE_AA
    
    对于(自动i=0;i请尝试以下操作:

    cv::Point P1, P2;
    
    P1.y = 50;
    P2.y = 50;
    
    int dot_gap = 50;
    int dot_width = 50;
    
    for( int i=0 ; i < in_img.cols; (i = i+d_width) ) {
    
        P1.x = i;
        P2.x = i + dot_width;
        cv::line(in_img, P1, P2, cv::Scalar(0, 255, 255), 2, cv::LINE_8);
    }
    
    cv::点P1、P2;
    P1.y=50;
    P2.y=50;
    int dot_间隙=50;
    int dot_width=50;
    对于(int i=0;i
    cv::Point P1, P2;
    
    P1.y = 50;
    P2.y = 50;
    
    int dot_gap = 50;
    int dot_width = 50;
    
    for( int i=0 ; i < in_img.cols; (i = i+d_width) ) {
    
        P1.x = i;
        P2.x = i + dot_width;
        cv::line(in_img, P1, P2, cv::Scalar(0, 255, 255), 2, cv::LINE_8);
    }