精华内容
下载资源
问答
  • opencv画图

    2013-04-08 10:47:14
    opencv画图程序,画直线,矩形,椭圆
  • OpenCV画图

    2019-01-25 16:21:45
    OpenCV画图 使用Matplotlib 可以用来放大图像,保存图像等 # -*- coding: utf-8 -*- import numpy as np import cv2 from matplotlib import pyplot as plt img = cv2.imread('image.png', 0) plt.imshow(img, cmap=...

    OpenCV画图

    使用Matplotlib

    可以用来放大图像,保存图像等

    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
    from matplotlib import pyplot as plt
    img = cv2.imread('image.png', 0)
    plt.imshow(img, cmap='gray', interpolation='bicubic')
    plt.xticks([]), plt.yticks([]) 
    plt.show()
    

    OpenCV 绘图函数

    cv2.line(), cv2.circle(), cv2.rectangle(), cv2.ellipse(), cv2.putText()
    参数:

    • img:想要绘制的图像
    • color:形状的颜色。以RGB为例,需要传入一个元组,例如:(255, 0,0)。
    • thickness:线条的粗细。如果给一个闭合图形设置-1,那么这个图形就会被填充。默认值是1.
    • linetype:线条的类型,8连接(默认),抗锯齿等。

    1.画线:cv2.line(),需要起点和终点

    import cv2
    import numpy as np
    # Create a black image
    img = np.zeros((512, 512, 3), np.uint8)
    # Draw a diagonal blue line with thickness of 5 px
    cv2.line(img,(0, 0), (511, 511), (255, 0, 0), 5)
    #cv2.polylines()可以用来画很多条线,将起始点存在列表里传给函数即可。
    

    2.画矩形:cv2.rectangle(),需要左上顶点后右下顶点

    cv2.rectangle(img, (384, 0), (510, 128), (0, 255, 0), 3)
    

    3.画圆:cv2.circle(),需要圆心和半径

    cv2.circle(img, (447, 63), 63, (0, 0, 255), -1)
    

    4.画椭圆:cv2.ellipse(),需要中心点,长轴,短轴,旋转角度

    cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1)
    

    5.画多边形:

    pts = np.array([[10,5],[20,30],[70,20],[50,10]],np.int32)
    pts = pts.reshape((-1, 1, 2))
    

    6.在图片上添加文字
    需要设置的参数:需要绘制的文字,位置,类型,大小,颜色等。

    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img,'OpenCV',(10,500),font,4,(255,255,255),2)
    

    7.展示

    from matplotlib import pyplot as plt
    plt.imshow(img, cmap='gray', interpolation='bicubic')
    plt.xticks([]),plt.yticks([]) 
    plt.show()
    

    所有的绘图函数返回的都是None,所以不能用img = cv2.line()。

    展开全文
  • opencv 画图函数简介

    2021-04-02 14:42:47
    opencv 画图 Cv 画直线 cv.line(img, (20, 100), (80, 100), (222, 111, 90), 5) Img : 所要画直线的画板 (20, 100):直线初始坐标 (80, 100):直线的终止坐标 (222, 111, 90):直线的颜色 ----RGB数值 ...

    opencv 画图

    Cv 画直线
    cv.line(img, (20, 100), (80, 100), (222, 111, 90), 5)
    	
    	Img : 所要画直线的画板
    	
    	(20, 100):直线初始坐标
    	
    	(80, 100):直线的终止坐标
    	
    	(222, 111, 90):直线的颜色 ----RGB数值
    	
    	5:直线的宽度,此值不能为负数
    
    Cv 画矩形
    cv.rectangle(img, (20, 40), (140, 160), (10, 155, 40), 5)
    	
    	Img:所要画矩形的画板
    	
    	(20, 40):矩形的初始坐标
    	
    	(140, 160):矩形初始坐标的对角坐标
    	
    	(10, 155, 40):矩形边框线的颜色
    	
    	5:矩形边框线的宽度,当此值为负数时,会将矩形内填充边框线颜色
    
    Cv 画圆形
    cv.circle(img, (80, 100), 60, (310, 234, 215), 5)
    	
    	Img:所要画圆形的画板
    	
    	(80, 100):圆心的坐标
    	
    	60:圆形的半径
    	
    	(310, 234, 215):圆形的边框线颜色
    	
    	5:圆形的边框线宽度,当此值为负数时,会将圆形内填充边框线颜色
    
    Cv 画椭圆
    cv.ellipse(img, (256, 256), (100, 50), 0, 50, 180, (10, 155, 40), -1)
    	
    	img:所要画椭圆的画板
    	
    	(256, 256):椭圆的中心点
    	
    	(100, 50):椭圆的长轴长和短轴长
    	
    	0:椭圆整体的旋转角度
    	
    	50:椭圆切割的起始角度
    	
    	180:椭圆切割的终止角度
    	
    	(10, 155, 40):椭圆的颜色
    	
    	-1:椭圆的边框线宽度,当此值为正数时,颜色只为边框颜色,不填充内部
    
    Cv 画多边形
    cv.polylines(img, [pts], True, (0, 255, 255), 3)
    	Img:画多边形的画布
    	
    	[pts]:pts自身是一个 numpy.ndarray 三维数组
    				eg:[[[380 250]]
    					[[420 320]]
    					[[420 370]]
    					[[470 310]]
    					[[480  50]]]
    					
    	True:构成图形是否闭合状态,是False时,形成的图形将是一个折线
    	
    	(0, 255, 255):此图形的边框线颜色
    	
    	3:边框线的宽度,当为负数时,将会内部填充。
    
    Cv 加入文本
    cv.putText(img, 'txt--here', (10, 500), font, 1, (255, 255, 255), 2, cv.LINE_8)
    	Img:添加文本的画布
    	'txt--here':文本内容
    	(10, 500):文本的起始内容
    	Font:字体类型
    	1:字体大小
    	(255, 255, 255):字体颜色
    	2:字体描边宽度
    	cv.LINE_8:线条类型
    

    综合代码案例

    def numpy_ce():
        import numpy as np
        import cv2 as cv
        img = np.zeros((512, 512, 3), np.uint8)
        cv.line(img, (20, 100), (80, 100), (222, 111, 90), 5)
        cv.rectangle(img, (20, 40), (140, 160), (10, 155, 40), 5)
        cv.circle(img, (80, 100), 60, (310, 234, 215), 5)
        cv.ellipse(img, (256, 256), (100, 50), 100, 0, 360, (310, 234, 215), 1)
        cv.ellipse(img, (256, 256), (100, 50), 50, 0, 360, 210, -1)
        cv.ellipse(img, (256, 256), (100, 50), 0, 50, 180, (10, 155, 40), -1)
        pts = np.array([[380, 250], [420, 320], [420, 370], [470, 310], [480, 50]], np.int32)
        print(pts, '--------------------int32')
        pts = pts.reshape(-1, 1, 2)
        print(pts, '----------shape -1,1,2')
        cv.polylines(img, [pts], True, (0, 255, 255), 3)
        font = cv.FONT_HERSHEY_SIMPLEX
        cv.putText(img, 'txt--here', (10, 500), font, 1, (255, 255, 255), 2, cv.LINE_8)
        cv.imshow('img--line', img)
        cv.waitKey(0)
    
    画图结果展示

    在这里插入图片描述

    展开全文
  • opencv画图实现化学原子模型图 先放效果图 宏定义 #define WINDOW_WIDTH 600 #define WINDOW_NAME1 "【绘制图1】" CMakeLists.txt文件配置 cmake_minimum_required(VERSION 3.14) project(test1) set...

    opencv画图实现化学原子模型图

    先放效果图
    在这里插入图片描述

    宏定义

    #define WINDOW_WIDTH 600
    #define WINDOW_NAME1 "【绘制图1】"
    
    1. CMakeLists.txt文件配置
    cmake_minimum_required(VERSION 3.14)
    project(test1)
    set(CMAKE_CXX_STANDARD 14)
    add_executable(test1 main.cpp)
    find_package(OpenCV)
    include_directories(${OpenCV_INCLUDE_DIRS})
    target_link_libraries(test1 ${OpenCV_LIBS})
    
    1. 椭圆函数DrawEllipse()写法
    void DrawEllipse(Mat img,double angle)
    {
        int thick=2;
        int line=8;
        ellipse(img,Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2),Size(WINDOW_WIDTH/4,
        WINDOW_WIDTH/16),angle,0,360,Scalar(255,129,0),thick,line);
    }
    
    1. 原点函数DrawFilledCircle()写法
    void DrawFilledCircle(Mat img,Point center)
    {
        int thick=-1;
        int line=8;
    circle(img,center,WINDOW_WIDTH/32,Scalar(0,0,255),thick,line);
    }
    
    1. main()函数写法
    int main(int argc,char** argv)
    {Mat atomImage=Mat::zeros(WINDOW_WIDTH,WINDOW_WIDTH,CV_8UC3);
    DrawEllipse(atomImage,90);
    DrawEllipse(atomImage,0);
    DrawEllipse(atomImage,45);
    DrawEllipse(atomImage,-45);
    DrawFilledCircle(atomImage,Point(WINDOW_WIDTH/2,WINDOW_WIDTH/2));
    imshow(WINDOW_NAME1,atomImage);
    moveWindow(WINDOW_NAME1,0,200);
    waitKey();
    
    
        return 0;
    }
    
    
    展开全文
  • 在上一篇博客中写了python 如何实现多进程同步操作, 在我用opencv 画图的时候发现了如果单纯的使用多进程不能实现数据共享, 后来在查阅相关文章后得到了解决, 完整代码在结尾 本人思路: 在学习过opencv 后我学会了...

    多进程数据共享

    在上一篇博客中写了python 如何实现多进程同步操作, 在我用opencv 画图的时候发现了如果单纯的使用多进程不能实现数据共享, 后来在查阅相关文章后得到了解决, 完整代码在结尾

    本人思路:

    在学习过opencv 后我学会了如何使用鼠标作为画笔, 来绘画, 以及如何使用轨迹栏来动态修改数据, 于是我想把两者结合, 由于传统写的python 代码是流水线式的, 画笔的颜色设定之后只能通过修改参数来调整颜色

    后来才想用多进程来解决这个问题, 在学会了多进程创建之后, 又发现进程之间的数据, 默认是无法共享的, 所以要解决数据共享的问题

    大体的思路是这样的
    在这里插入图片描述

    首先创建一个类

    
    1. 创建一个类, 并将想要共享的数据存储在这个类的初始化操作中, 在后期就可以用这个对象的属性来保存这个数据
    
    ```python
    class cv_draw():
        # 设置函数的目的是为了返回给self 的值当做globol 数据来记录返回值
        def __init__(self):
            self.draw_bgc = np.zeros((280, 280, 3), np.uint8)
            self.color_bgc = np.zeros((280, 280, 3), np.uint8)
            self.r = Value('i', 255)
            self.g = Value('i', 255)
            self.b = Value('i', 255)
    
    

    这个类初始化的时候需要保存几个重要的信息:

    1. 画布创建, 以及设置他的背景颜色self.draw_bgc = np.zeros((280, 280, 3), np.uint8)
    2. 在调色的时候要显示颜色所以要创建一张背景图片来根据rgb 的值显示
    3. 在调色的时候显示背景颜色, 所以要存储不断变化的r,g,b 的值
      在创建self.rgb 的变量的时候要注意调用Value 函数来将其设置为共享的数据, 这样在多进程调用的时候才能够动态的修改数据 但是在使用Value() 之后如果想要获取其值的话就需要用self.r.value方法来获取self.r中的数据

    关于Value函数的参数'i' 表示int 数据类型, 255 表示初始化的值

    self.r = Value('i', 255)
    self.g = Value('i', 255)
    self.b = Value('i', 255)
    

    在这里插入图片描述

    显示轨迹栏函数

    def show_color(self):
         name = 'color_bar'
         cv.namedWindow(name)
         cv.createTrackbar('R', name, 0, 255, self.nothing)
         cv.createTrackbar('G', name, 0, 255, self.nothing)
         cv.createTrackbar('B', name, 0, 255, self.nothing)
         while True:
             k = cv.waitKey(1) & 0xff
             if k == 27:
                 break
             cv.imshow('color_bar', self.color_bgc)
             self.r.value = cv.getTrackbarPos('R', 'color_bar')
             self.g.value = cv.getTrackbarPos('G', 'color_bar')
             self.b.value = cv.getTrackbarPos('B', 'color_bar')
             self.color_bgc[:] = [self.b.value, self.g.value, self.r.value]
    

    定义画图函数

    在这里展示的是画一个圆(鼠标双击)
    cv.circle(self.draw_bgc, (x, y), 100, (self.b.value, self.g.value, self.r.value), -1)第四个参数表示的是画图的颜色, 使用共享的数据

    def draw_circle(self, event, x, y, flags, param):
        if event == cv.EVENT_LBUTTONDBLCLK:
            cv.circle(self.draw_bgc, (x, y), 100, (self.b.value, self.g.value, self.r.value), -1)
    
    def draw(self):
        cv.namedWindow('image')
        cv.setMouseCallback('image', self.draw_circle)
    
        while True:
            cv.imshow('image', self.draw_bgc)
            if cv.waitKey(20) & 0xff == 27:
                break
        cv.destroyAllWindows()
    

    主函数

    调用多进程的方法来实现我想要的功能,注意这里不能使用多线程, 我尝试过使用多线程但是会出错, 不知道为啥, 最后用多进程的时候就不会报错

    if __name__ == '__main__':
        paint = cv_draw()
        bar = Process(target=paint.show_color)
        draw = Process(target=paint.draw)
        bar.start()
        draw.start()
    
    

    结果展示

    在这里插入图片描述

    完整代码

    import cv2 as cv
    import numpy as np
    import threading
    from multiprocessing import Process, Pipe, Pool, Value
    # 建立鼠标回调函数
    
    import time
    
    
    class cv_draw():
        # 设置函数的目的是为了返回给self 的值当做globol 数据来记录返回值
        def __init__(self):
            self.draw_bgc = np.zeros((280, 280, 3), np.uint8)
            self.color_bgc = np.zeros((280, 280, 3), np.uint8)
            self.r = Value('i', 255)
            self.g = Value('i', 255)
            self.b = Value('i', 255)
    
        def nothing(self):
            pass
    
        def show_color(self):
            name = 'color_bar'
            cv.namedWindow(name)
            cv.createTrackbar('R', name, 0, 255, self.nothing)
            cv.createTrackbar('G', name, 0, 255, self.nothing)
            cv.createTrackbar('B', name, 0, 255, self.nothing)
            while True:
                k = cv.waitKey(1) & 0xff
                if k == 27:
                    break
                cv.imshow('color_bar', self.color_bgc)
                self.r.value = cv.getTrackbarPos('R', 'color_bar')
                self.g.value = cv.getTrackbarPos('G', 'color_bar')
                self.b.value = cv.getTrackbarPos('B', 'color_bar')
                self.color_bgc[:] = [self.b.value, self.g.value, self.r.value]
    
        def draw_circle(self, event, x, y, flags, param):
            if event == cv.EVENT_LBUTTONDBLCLK:
                cv.circle(self.draw_bgc, (x, y), 100, (self.b.value, self.g.value, self.r.value), -1)
    
        def draw(self):
            cv.namedWindow('image')
            cv.setMouseCallback('image', self.draw_circle)
    
            while True:
                cv.imshow('image', self.draw_bgc)
                if cv.waitKey(20) & 0xff == 27:
                    break
            cv.destroyAllWindows()
    
    
    if __name__ == '__main__':
        paint = cv_draw()
        bar = Process(target=paint.show_color)
        draw = Process(target=paint.draw)
        bar.start()
        draw.start()
    
    展开全文
  • C++ opencv 画图

    2020-07-16 15:51:46
    转载收藏一篇opencv+C++的画图文章,感觉写的还行,试用就是有点慢,我是用UDP通信接收数据,并一个输出图形出来,数据包接收频率60帧每秒,但buffer很小,所以对速度要求很高,很容易丢帧和卡顿,还在继续找方法中 ...
  • OpenCV 画图中几个容易忘的函数

    千次阅读 2019-03-20 21:54:34
    OpenCV画图中易忘的函数 抽空,顺便整理一下资料。。。opencv中经常会用到几个画图函数,但Python的接口中给出的参数含义有时候不是很容易懂,所以记录一下。 绘制多边形cv2.polylines 函数定义: cv2.polylines(img...
  • opencv画图总结

    2017-03-21 09:27:00
    总结opencv的各种画图流程 转载于:https://www.cnblogs.com/hustdc/p/6592797.html
  • OpenCV画图函数

    2020-11-24 16:47:21
    circle(Mat img, Point center, int radius, Scalar color, int thickness=1, int lineType=8, int shift=0) 函数的各个参数功能: img为源图像 center为画圆的圆心坐标 ... radius为圆的半径 ...
  • opencv画图_c++

    2020-03-25 14:39:55
    认识画图函数 #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc.hpp> //#include<iostream> #define w 400 using namespace cv; /*...
  • python opencv画图

    2019-09-30 12:45:22
    cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2) # display image winname = 'example' cv2.namedWindow(winname) cv2.imshow(winname, img) cv2.waitKey(0) cv2.destroyWindow(winname) ...
  • OpenCV 画图实例

    2009-11-03 15:28:24
    关于OpenCV的GUI应用,通俗易懂,希望能给你带来帮助!
  • opencv 画图 (c++)

    万次阅读 2019-09-20 11:30:06
    文章目录直线函数参数:Demo矩形函数参数:Demo圆函数参数:Demo 直线 函数 void line(Mat& img, Point pt1, Point pt2, const Scalar& color, int thickness=1, int lineType=8, int shift=0) ...
  • Python-Opencv(三):使用OpenCv画图

    千次阅读 2020-02-03 11:02:13
    使用opencv画图,主要有这几种常见的画图方法: cv2.line 画线 cv2.circle 画圆 cv2.rectangle 画长方形 cv2.polylines 画多边形 cv2.ellipse 画椭圆 cv2.putText 添加文字 cv2.setMouseCallback 通过...
  • opencv画图函数

    2015-09-14 11:04:57
    画线函数line Point a = Point (600,600);  line(picture,a,center,Scalar(255,0,0)); //参数为:要画线的图像、起始点、结束点、颜色、粗细、线型  ...rectangle(picture,a,center,Sc
  • Opencv画图操作

    2018-07-19 13:58:00
    1. 画矩形 MyRect rect;rect.left = 5;rect.top = 5;rect.right = 100;rect.bottom = 100;IplImage * pColorImage = cvCreateImage(cvSize(width, height), 8, 3);...cvRectangle(pColorImage, cvPoint(rect.left, ...
  • opencv简单画图

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,585
精华内容 1,834
关键字:

opencv画图