精华内容
下载资源
问答
  • 怎么在图片上画线
    千次阅读
    2019-07-12 16:58:30

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;

    namespace drawLine
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void button1_Click(object sender, EventArgs e)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = Image.FromFile(openFileDialog1.FileName);
                }
            }

            private void button2_Click(object sender, EventArgs e)
            {
                if (pictureBox1.Image != null)
                {
                    Bitmap bt = new Bitmap(pictureBox1.Image);
                    Graphics g = Graphics.FromImage(bt);
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0,bt.Height/2), new Point(bt.Width,bt.Height/2));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(bt.Width/2,0), new Point(bt.Width/2, bt.Height));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0, 0), new Point(bt.Width, bt.Height));
                    g.DrawLine(new Pen(Color.Red, 40), new Point(0,bt.Height), new Point(bt.Width,0));
                    pictureBox1.Image = bt;
                }
            }
        }
    }
     

    更多相关内容
  • OpenCV在图片上画线和矩形

    千次阅读 2022-02-09 22:07:44
    今天讲一下通过opencv的Line函数,图像中绘制一条我们想要的直线或者线段,以及使用Rectangle函数绘制矩形; CV_RGB 创建一个色彩值. #define CV_RGB( r, g, b ) cvScalar( (b), (g), (r) ) Line 绘制连接两...

    今天讲一下通过opencv的Line函数,在图像中绘制一条我们想要的直线或者线段,以及使用Rectangle函数绘制矩形;

     

    CV_RGB

    创建一个色彩值.

    #define CV_RGB( r, g, b )  cvScalar( (b), (g), (r) )

    Line

    绘制连接两个点的线段

    void cvLine( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
                 int thickness=1, int line_type=8, int shift=0 );

    img:图像;

    pt1:线段的第一个端点。

    pt2:线段的第二个端点。

    color:线段的颜色。

    thickness:线段的粗细程度。

    line_type:线段的类型。

    8 (or 0) – 8-connected line(8邻接)连接 线。
    
    4 – 4-connected line(4邻接)连接线。
    
    CV_AA – antialiased 线条。

    shift:坐标点的小数点位数。

    函数cvLine 在图像中的点1和点2之间画一条线段。线段被图像或感兴趣的矩形(ROI rectangle)所裁剪。对于具有整数坐标的non-antialiasing 线条,使用8-连接或者4-连接Bresenham 算法。画粗线条时结尾是圆形的。画 antialiased 线条使用高斯滤波。要指定线段颜色,用户可以使用使用宏CV_RGB( r, g, b )。

    Rectangle

    绘制简单、指定粗细或者带填充的 矩形

    void cvRectangle( CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color,
                      int thickness=1, int line_type=8, int shift=0 );

    img:图像.

    pt1:矩形的一个顶点。

    pt2:矩形对角线上的另一个顶点

    color:线条颜色 (RGB) 或亮度(灰度图像 )(grayscale image)。

    thickness:组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。

    line_type:线条的类型。见cvLine的描述

    shift:坐标点的小数点位数。

    函数 cvRectangle 通过对角线上的两个顶点绘制矩形。

    line1.cpp
    #include <opencv2/opencv.hpp>
    using namespace cv;
    int  main()
    {
         Mat src = imread("./Lina.jpg");
         //Rect rect(230, 5, 280, 290);
         int x=50;
         int y=50;
         Rect rect(x, y, 40, 20);
        // cv::line(src,Point(50,50),Point(90,70),1,LINE_4,0);
         cv::line(src,Point(50,50),Point(90,70),Scalar(255,0,0),1,8,0);
    
         cv::rectangle(src, rect, Scalar(255, 0, 0),1, LINE_8,0);
        //  cv::rectangle(src, Point(230, 5), Point(510, 295), Scalar(255, 255, 255), 5, LINE_8, 0);
         imwrite("src.jpg", src);
         imshow("src", src);
         waitKey(0);
         return 0;
    }
    
    CMakeLists.txt
    cmake_minimum_required(VERSION 2.8)
    project( test )
    find_package( OpenCV REQUIRED )
    add_executable( test line1.cpp )
    target_link_libraries( test ${OpenCV_LIBS} )
    
    #  cmake .
    #  make
    #  ./test

    原图 

    叠加后 

     

    展开全文
  • cv2 在图片上画线

    千次阅读 2021-05-11 13:43:46
    import cv2 # capture=cv2.VideoCapture(0) img=cv2.imread('../../img/street.jpg',1) cv2.line(img,(0,0),(100,100),color=(255,0,0),thickness=5) # 从(0...# capture.release() # break 注释的代码是视频上画线
    import cv2
    # capture=cv2.VideoCapture(0)
    img=cv2.imread('../../img/street.jpg',1)
    cv2.line(img,(0,0),(100,100),color=(255,0,0),thickness=5)
    # 从(0,0)-》(100,100)颜色(BGR 255 是蓝)宽度是5
    cv2.imshow('image',img)
    cv2.waitKey(0)
    # while (True):
    #     ref, frame = capture.read()
    #     cv2.line(frame,(0,0),(100,100),color=(255,0,0),thickness=5)
    #     cv2.imshow("video", frame)
    # 
    #     c = cv2.waitKey(1) & 0xff
    #     if c == 27:
    #         capture.release()
    #         break
    

    注释的代码是在视频上画线
    在这里插入图片描述

    展开全文
  • 原理:创建透明度为0的Texture2D,利用改变像素点的颜色,实现画线功能。 创建图片 rawimage 的大小一定要与屏幕大小保持一致 代码部分: 完整代码:挂载RawImage,对应组件拖进去就行 /****************...

    原理:创建透明度为0的Texture2D,利用改变像素点的颜色,实现画线功能。

    创建图片

    rawimage 的大小一定要与屏幕大小保持一致

    代码部分:

    完整代码:挂载RawImage上,对应组件拖进去就行

    /*******************************************************************
    * 作者:     # maki #
    * 创建日期: # 2019年9月4日18:07:57 #
    * 描述:  UGUI 图片划线工具
    ******************************************************************/
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.EventSystems;
    using UnityEngine.UI;
    
    public enum TextureLineType
    {
        none,//不画线
        line,//自由线
        dotLine,//点画线
        eraseLine,//擦除线
    }
    public class TextureLineTool : MonoBehaviour {
    
        public static TextureLineTool Instance;
        #region 画线设置
        /// <summary>
        /// 画线风格
        /// </summary>
        [SerializeField]
        private TextureLineType lineType;//画线风格
        /// <summary>
        /// 渲染次数:点画线1000,曲线100  不可过大,太消耗渲染性能
        /// </summary>
        [SerializeField]
        private float lineNum = 100f;
        /// <summary>
        /// 笔刷的宽度
        /// </summary>
        [SerializeField]
        private int lineWidth = 3;
        /// <summary>
        /// 笔刷的颜色
        /// </summary>
        [SerializeField]
        private Color lineColor = new Color(1, 1, 1, 0);
        #endregion
    
        /// <summary>
        /// 被操作的贴图
        /// </summary>
        [SerializeField]
        private Texture2D targetTexture;
        /// <summary>
        /// 目标图片UI
        /// </summary>
        [SerializeField]
        private RawImage targetRawImage;
        /// <summary>
        /// 划线相机
        /// </summary>
        [SerializeField]
        private Camera line_Camera;
        /// <summary>
        /// 擦除鼠标图片跟随
        /// </summary>
        [SerializeField]
        private Image mouseImage;
    
        /// <summary>
        /// 上一个点鼠标点
        /// </summary>
        Vector2 lastPoint = Vector2.zero;
    
        /// <summary>
        /// 被记录的鼠标位置
        /// </summary>
        private List<Vector2> mousePoints;
        /// <summary>
        /// 被记录的步骤
        /// </summary>
       private List<Texture2D> textureRecords;
    
        /// <summary>
        /// 当前画板下标
        /// </summary>
        int index = 0;
    
    
        void Awake()
        {
            Instance = this;
        }
        private void Start()
        {
            lineType = TextureLineType.none;
            mousePoints = new List<Vector2>();
            targetRawImage.texture = new Texture2D(Screen.width, Screen.height);
            targetTexture = targetRawImage.texture as Texture2D;
            ClearTexture();
            textureRecords = new List<Texture2D>();
            RecortStep();
        }
    
    
        void Update()
        {
            if (lineType == TextureLineType.line || lineType == TextureLineType.eraseLine)
            {
                if (Input.GetMouseButton(0))
                {
                    if (IsPointerOverUI(targetRawImage.transform))
                    {
                        Vector2 addPoint = line_Camera.ScreenToViewportPoint(Input.mousePosition);
                        OperateTexture(addPoint, lineType);
                    }
                    else
                    {
                        lastPoint = Vector2.zero;
                    }
                }
                if (Input.GetMouseButtonUp(0))
                {
                    lastPoint = Vector2.zero;
                    RecortStep();
                    mouseImage.transform.localPosition = new Vector2(-10000, -10000);
                }
            }
            else if (lineType == TextureLineType.dotLine)
            {
                if (Input.GetMouseButtonDown(0))
                {
                    if (IsPointerOverUI(targetRawImage.transform))
                    {
                        Vector2 addPoint = line_Camera.ScreenToViewportPoint(Input.mousePosition);
                        OperateTexture(addPoint, lineType);
                    }
                    else
                    {
                        lastPoint = Vector2.zero;
                    }
                }
    
            }
           if (Input.GetMouseButtonDown(1))
            {
                lastPoint = Vector2.zero;
                lineType = TextureLineType.none;
            }
        }
    
        /// <summary>
        /// 画线
        /// </summary>
        /// <param name="point"></param>
        /// <param name="mColor"></param>
        private  void OperateTexture(Vector2 point, TextureLineType lineType)
        {
            if (lastPoint == Vector2.zero)
            {
                lastPoint = point;
                return;
            }
            for (int j = 0; j < lineNum; j++)
            {
                float scaleX = Mathf.Lerp(lastPoint.x, point.x, j / lineNum);
                float scaleY = Mathf.Lerp(lastPoint.y, point.y, j / lineNum);
                int textureX = (int)(scaleX * Screen.width);
                int textureY = (int)(scaleY * Screen.height);
                // 线条加粗
                for (int a = textureX - lineWidth; a < textureX + lineWidth; a++)
                {
                    for (int b = textureY - lineWidth; b < textureY + lineWidth; b++)
                    {
                        targetTexture.SetPixel(a, b, lineColor);
                    }
                }
            }
            targetTexture.Apply();
            lastPoint = point;
            if (lineType == TextureLineType.dotLine)
                RecortStep();
            else if (lineType == TextureLineType.eraseLine)
            {
                Vector2 pos;
                if(RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform as RectTransform,Input.mousePosition,line_Camera,out pos))
                {
                    mouseImage.transform.localPosition = pos;
                }
            }
        }
    
        /// <summary>
        /// 重置贴图(全部擦除)
        /// </summary>
        public void ClearTexture()
        {
            int x, y;
            for (x = 0; x < targetTexture.width; x++)
            {
                for (y = 0; y < targetTexture.height; y++)
                {
                    targetTexture.SetPixel(x, y, new Color(1, 1, 1, 0));
                }
            }
            targetTexture.Apply();
        }
    
        /// <summary>
        /// 设置画线模式
        /// </summary>
        public void SetLineType(TextureLineType type)
        {
            lastPoint = Vector2.zero;
            lineType = type;
            switch (lineType)
            {
                case TextureLineType.none:
                    break;
                case TextureLineType.line:
                     lineNum = 100f;
                     lineWidth = 3;//设置笔宽
                    lineColor = Color.red;
                    break;
                case TextureLineType.dotLine:
                    lineNum = 1000f;
                    lineWidth = 3;//设置笔宽
                    lineColor = Color.red;
                    break;
                case TextureLineType.eraseLine:
                    lineNum = 200f;
                    lineWidth = 30;//设置笔宽
                    lineColor = new Color(1, 1, 1, 0);
                    break;
                default:
                    break;
            }
        }
    
        /// <summary>
        /// 记录步骤
        /// </summary>
        private void RecortStep()
        {
            if (textureRecords.Count > 0)
            {
                if (index != textureRecords.Count - 1)
                {
                    textureRecords.RemoveRange((index + 1), textureRecords.Count - (index + 1));
                }
            }
            Texture2D newTexture = Instantiate(targetTexture);
            textureRecords.Add(newTexture);
            index = textureRecords.Count - 1;
        }
        /// <summary>
        /// 上一步
        /// </summary>
        public void StepUp()
        {
            if (index > 0)
            {
                index--;
                targetTexture = Instantiate(textureRecords[index]);
                targetRawImage.texture = targetTexture;
            }
        }
        /// <summary>
        /// 下一步
        /// </summary>
        public void StepDown()
        {
            if (index < textureRecords.Count - 1)
            {
                index++;
                targetTexture = Instantiate(textureRecords[index]);
                targetRawImage.texture = targetTexture;
            }
        }
    
        /// <summary>
        /// 获取当前UI
        /// </summary>
        private bool IsPointerOverUI(Transform tran)
        {
            if (EventSystem.current.IsPointerOverGameObject())
            {
                PointerEventData pointerEventData = new PointerEventData(EventSystem.current);
                pointerEventData.position = Input.mousePosition;
                List<RaycastResult> result = new List<RaycastResult>();
                EventSystem.current.RaycastAll(pointerEventData, result);
                if (result.Count > 0)
                    foreach (var item in result)
                    {
                        if (item.gameObject.transform.IsChildOf(tran))
                        {
                            return true;
                        }
                    }
            }
            return false;
        }
    }
    

     

    测试代码:

    
    public class LineTest : MonoBehaviour {
    
        public Button Btn_Free;
        public Button Btn_Dolt;
        public Button Btn_Erase;
        public Button Btn_Cancel;
        public Button StepUp;
        public Button StepDown;
        // Use this for initialization
        void Start () {
            Btn_Free.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.line));
            Btn_Dolt.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.dotLine));
            Btn_Erase.onClick.AddListener(() => TextureLineTool.Instance.SetLineType(TextureLineType.eraseLine));
            Btn_Cancel.onClick.AddListener(() => TextureLineTool.Instance.ClearTexture());
            StepUp.onClick.AddListener(() => TextureLineTool.Instance.StepUp());
            StepDown.onClick.AddListener(() => TextureLineTool.Instance.StepDown());
        }
        // Update is called once per frame
        void Update () {
    		
    	}
    }

    显示效果如下:

    说明:上一步和下一步,从项目中扣取下来,需求不大,存在bug,没有做修改

    展开全文
  • python 实现PIL模块在图片画线写字

    千次阅读 2020-12-14 11:11:18
    图片上画线条import sysfrom PIL import Image,ImageDrawim = Image.open("th.png")draw = ImageDraw.Draw(im) #实例化一个对象draw.line((0, 0) + im.size, fill=128, width=5) #线的起点和终点,线宽draw.line((0,...
  • 如何照片上画线

    千次阅读 2021-04-23 08:47:48
    本人做了一个GUI界面,目标是实现axes坐标中导入一张照片,然后可以照片用鼠标圈,然后就可以计算出圈部分占照片总面积的比例;同时也可以用白色覆盖多余部分(可以看成橡皮擦功能吧?)但目前:圈,橡皮...
  • opencv 图片上画一条线

    千次阅读 2022-03-22 17:34:51
    1在图片上用鼠标进行操作,opencv主要用到setMouseCallback()函数。 winname 窗口名称 onMouse 鼠标事件的回调函数 userdata 传递给回调函数 还有onMouse函数 event 鼠标事件 x,y 鼠标在图片上的坐标 flags 鼠标...
  • 直接先效果视频 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> .wrap{ background: #...
  • 有这样一个需求,一张图片上画几条线并保存,如图所示: 已知各个点的x,y坐标,坐标范围是[0.000,1],即将横纵方向分成1000份。 我们可以使用java.awt.Graphics2D的库来实现。 Graphics2DGraphics类提供绘制...
  • Unity 图片画线Shader

    千次阅读 2022-01-10 10:45:32
    上周分享了一个水墨风格的Shader,这周分享一个图片画点连线的Shader,话不多说,先看效果 我做的是一个百度人脸识别划线功能,图中所有蓝色的点都是通过百度人脸识别获取到的,要做的也只是把Vector4的数组传给...
  • MATLAB 图片画线(简简单单一根线)

    千次阅读 2022-03-09 11:06:06
    画线函数,rm是传过来的图片(灰度图像),(a,b),(c,d)为线的端点。 由于默认生成灰度图像全黑,所以这里直接将像素值改为1,画白线。 单独处理竖线和横线的情况。 为防止单独沿着一个坐标计算另一个坐标时,...
  • python PIL模块在图片画线写字

    千次阅读 2019-05-07 16:18:42
    图片上画线条 import sys from PIL import Image,ImageDraw im = Image.open("th.png") draw = ImageDraw.Draw(im) #实例化一个对象 draw.line((0, 0) + im.size, fill=128, width=5) #线的起点和终点,线宽 draw....
  • #include <opencv2/highgui/highgui.hpp> #include <opencv2/imgproc/imgproc.hpp> // 画框:图片,左上点,...// 画圆:图片,圆心,半径,颜色,线的粗细(-1表示实心,可用于点) cv::circle(img,c
  • Word文档怎么在图片画线

    千次阅读 2021-01-14 14:22:15
    回答:单击图片=选择“图片"工具栏中的工具进行调整 ,如果没有显示“图片”工具栏,请右键单击图片,选择 显示“图片”工具栏即可,图片工具栏的图标对应作用从左到右如下:1、插入图片:用于替换文档中的图片;...
  • 例如上面在图片上画圈效果的制作方法:1、单击插入----形状----线条----椭圆工具;2、拖动鼠标,在图片所需要的位置绘制一个适当大小的圆;3、单击绘图工具格式----形状填充----无填充颜色;4、单击绘图工具格式----...
  • java基于OpenCv图像处理_绘图_画线

    千次阅读 2021-10-28 15:55:43
    3.1、画线 要绘制一条线,您需要传递线的开始和结束坐标。我们将创建一个黑色图像,并从左上角到右下 角绘制一条红线。 public static void main(String[] args) { Scalar bck = new Scalar(255, 255, 255,...
  • 1 前言1.1 业务场景图片储存后台中,根据图片的地址,vue页面中,查看图片,并根据坐标标注指定区域。由于浏览器的机制,使用window.location.href下载图片时,并不会保存到本地,会浏览器打开。2 实现原理2.1...
  • 我有如下数据集,想要坐标轴上画出它们的图像:x = data1 =... 作者 | 天元浪子编辑 | 胡巍巍近日,笔者的微信群里,白垩老师问如何用 python 武汉肺炎疫情地图。 白垩老师是研究海洋生态与地球生物的学者,...
  • 经常imshow一幅图片之后,会上面plot一些标记点,但是imwrite的时候发现点并没有随之被保存下来。 尝试一些方法如下: 一、figure imshow(image0_rgb) hold on plot(loc0(:,2),loc0(:,1),'r+') gfframe=getframe...
  • python曲线图-python曲线

    千次阅读 2020-10-28 22:54:00
    我有如下数据集,想要坐标轴上画出它们的图像:x = data1 =... 作者 | 天元浪子编辑 | 胡巍巍近日,笔者的微信群里,白垩老师问如何用 python 武汉肺炎疫情地图。 白垩老师是研究海洋生态与地球生物的学者,...
  • 自制Unity UI画线工具,Texture2D 图片上画线,自由线,点画线.....
  • import cv2 import numpy as np img = np.ones(shape=(512, 512, 3)) # HWC print(img.dtype) # img[:] = 255, 0, 0 # 整个图像变为蓝色 ...# 对角线 cv2.line(img, (0, 0), (img.shape[1], img.shape[0])
  • 如何手机快速给图片做标记?

    千次阅读 2020-12-23 15:03:09
    https://www.zhihu.com/video/984828945480482816什么时候,你会需要手机图片做标记呢?社交工具办公时,需要向网络那边的另一个家伙指出需要修改、优化的内容所在;与朋友分享时需要告诉对方某个特定的High点...
  • java为图片上面画线

    千次阅读 2018-11-18 12:48:22
    package com.bootdo.testDemo; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image;...import java.awt.Stroke;...import java.awt.image.BufferedImage;...import...
  • opencv鼠标事件获取 图像处理操作(手动画线) 基本思路: (1)读入一张图片 (2)设置鼠标监听事件,鼠标左键按下并且光标...(5)不断更新显示这张图片(opencv画圆画线直接对图进行操作,操作后需要实时更新显示效果...
  • 我的处女作《Canvas系列教程》我的Github正在连载更新,希望能得到您的关注和支持,让我有更多的动力进行创作。 教程介绍、教程目录等能README里查阅。 传送门:https://github.com/827652549/CanvasStudy ...
  • iOS 涂鸦 我们已经讲过画直线 和画带箭头的线段...这节 我们尝试做一下 随意画 手指移动到哪里就哪里画线 如下图所示: 使用Xcode创建项目,起名:TestFingerLine (详细的创建方法 参照 http://blog.csdn.net/
  • Android动态画线 坐标画线动画

    千次阅读 2021-12-10 15:44:45
    效果图如下 直线动画 根据相对于图片本身的坐标xy数组 基于view的左上角为原点 在图片上动态画线
  • 对与python里面使用opencv(cv2)图像绘制点、线、矩形框和文本,以下给出具体的示例。 原图像如下: python代码如下: import cv2 img_path = 's.jpg' # 读图像 img = cv2.imread(img_path) # 绘制点 ...
  • 小弟最近因为公司业务需求,需要给学校的老师们做一个手机和电脑同步进行图片上画线批注的效果.开始网上找了几天, 但没有找到符合我们要求的开源项目.所以最后花了一定时间研究相关信息,写了这个自定义view.. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 187,471
精华内容 74,988
关键字:

怎么在图片上画线