OpenCvSharp 學習筆記7 --繪制圖形和文字
一 繪制線條
API :Cv2.Line()
參數 | 說明 |
---|---|
img: | 源圖像 |
pt1: | 第一個點 |
pt2: | 第二個點 |
color | 線條顏色 |
thickness: | 線條的厚度(粗細) |
lineType: | 線條類型 (枚舉值) |
shift | 點坐標中的小數位數。[默認值為0] |
代碼:
private static Mat src;
static void Main(string[] args)
{
loadImage();
}
private static void loadImage()
{
using (src = new Mat(@"C:\Users\wang\Desktop\s1.jpg", ImreadModes.AnyColor | ImreadModes.AnyDepth))
{
DrawLine();
using (new Window("SRC Image", WindowMode.AutoSize, src))
{
Cv2.WaitKey(0);
}
}
}
/// <summary>
/// 繪制線條
/// </summary>
private static void DrawLine()
{
Point p1 = new Point(20, 30);
Point p2;
p2.X = 300;
p2.Y = 30;
Scalar color = new Scalar(0, 0, 255);
Cv2.Line(src, p1, p2, color, 10, LineTypes.Link8);
}
二 :繪制矩形
API:Cv2.Rectangle()
參數 | 說明 |
---|---|
img: | 源圖像 |
rect: | 舉行對象 |
color | 線條顏色 |
thickness: | 線條的厚度(粗細) |
lineType: | 線條類型 (枚舉值) |
shift | 點坐標中的小數位數。[默認值為0] |
代碼:
/// <summary>
/// 繪制矩形
/// </summary>
private static void DrawRectangle()
{
Rect rect = new Rect(100, 200, 100, 100);
Scalar color = new Scalar(255, 0, 0);
Cv2.Rectangle(src, rect, color, 2, LineTypes.AntiAlias);//LineTypes.AntiAlias:反鋸齒效果
}
三:繪制橢圓和圓
代碼:
/// <summary>
/// 繪制橢圓
/// </summary>
private static void DrawEllipse()
{
/*
* 參數:
* 1:背景圖片
* 2:中心點 橢圓的長軸和短軸 (如果相等就是圓)
* 3,橢圓的旋轉就角度
* 4:起始角度
* 5:結束角度
* 6:顏色
* 7:線條寬度 默認 1
* 8:邊界類型 默認 Link8
* 9:中心坐標和坐標軸值的小數位數,默認0
*/
Cv2.Ellipse(src, new Point(src.Cols / 2, src.Rows / 2), new Size(src.Rows / 2, src.Cols / 2),90, 0, 360, new Scalar(0, 255, 0), 3, LineTypes.Link8);
}
/// <summary>
/// 繪制圓圈
/// </summary>
private static void DrawCricle()
{
Scalar color = new Scalar(0, 127, 255);
Point conter = new Point(src.Cols / 2, src.Rows / 2);
Cv2.Ellipse(src, conter, new Size(src.Cols / 4, src.Cols / 4), 90, 0, 360, color, 2, LineTypes.Link8);
}
四:繪制多變型
代碼:
/// <summary>
/// 繪制多邊形
/// </summary>
private static void DrawPolygon()
{
List<Point> pts1 = new List<Point>
{
new Point(400,400),
new Point(400,500),
new Point(500,500),
new Point(500,400),
new Point(400,400)
};
List<Point> pts2 = new List<Point>
{
new Point(10,10),
new Point(10,150),
new Point(150,150),
new Point(150,10),
new Point(10,10)
};
List<List<Point>> pp = new List<List<Point>>() { pts1, pts2 }; //包含幾個矩陣,就繪制幾個多邊形
Scalar color = new Scalar(0, 100, 33);
Cv2.FillPoly(src, pp, color, LineTypes.Link8, 0, new Point(0, 0));
}
五:隨機生成線段
代碼:
private static void RandomDrawLine()
{
//Random r = new Random();
RNG rng = new RNG(12345); //生成高斯隨機數
Point p1 = new Point();
Point p2 = new Point();
Mat m1 = new Mat(src.Size(), src.Type());
for (int i = 0; i < 5000; i++)
{
p1.X = rng.Uniform(0, src.Cols);//生成正太分布隨機數 // r.Next(0, src.Cols);
p1.Y = rng.Uniform(0, src.Cols);// r.Next(0, src.Cols);
p2.X = rng.Uniform(0, src.Cols);// r.Next(0, src.Cols);
p2.Y = rng.Uniform(0, src.Cols); //r.Next(0, src.Cols);
Scalar color = new Scalar(rng.Uniform(0, 255), rng.Uniform(0, 255), rng.Uniform(0, 255));//(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255));
Cv2.Line(m1, p1, p2, color, 1);
using (new Window("Random Line", WindowMode.AutoSize, m1))
{
if (Cv2.WaitKey(50) > 0) //50毫秒畫一條線段
{
break;
}
}
}
}
六:繪制文字
代碼:
static void Main(string[] args)
{
loadImage();
}
private static void loadImage()
{
using (src = new Mat(@"C:\Users\whx\Desktop\opcvImage\s1.jpg", ImreadModes.AnyColor | ImreadModes.AnyDepth))
{
Mat dst = new Mat(src.Size(),src.Type());
src.CopyTo(dst);
////寫字
Cv2.PutText(src, "Hello,OpenCvSharp!", new Point(300,200), HersheyFonts.HersheySimplex, 1,Scalar.All(255),2,LineTypes.Link4);
using (new Window("DST Image", WindowMode.Normal, dst))
using (new Window("SRC Image", WindowMode.Normal, src))
{
Cv2.WaitKey(0);
}
}
}
智能推薦
LeaFlet學習之動態繪制圖形
底圖使用mapbox設置樣式加載的,由于mapbox我也只會簡單的應用在這里就不多說了,本文主要講的是動態圖形的繪制寫的比較糙,代碼重復太多,僅為展示所用,可以動態繪畫點,線,圓,多邊形。 一、概述 主要的用的就是事件click、mousedown、mousemove、mouseup事件,Leaflet對繪圖好像沒有怎么封裝,我們要想自己動態繪制主要通過事件自己實現,代碼不難,簡單易懂。 二、底圖...
Leaflet學習之動態繪制圖形
1,動態繪制圓 效果如下: 2,動態繪線 動態繪線主要涉及到三個事件:click,dbclick,mousemove。click確定線的折點,dbclick確定線的終點,mousemove繪制鼠標移動過程中圖形的變化。 效果如下: 3,動態繪制多邊形 效果圖如下所示: 參考文章: Leaflet學習之路二——在地圖上繪制要素(點、線、多邊形) https://...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
猜你喜歡
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...