OpenCV程式開發(II) 林道通 教授 多媒體技術與應用 5/16.

Slides:



Advertisements
Similar presentations
While 迴圈 - 不知重複執行次數
Advertisements

日月潭的水怪 動畫重新著色過的圖片淡出成為黑白圖片 (進階)
計算機程式語言實習課.
“八皇后”问题 崔萌萌 吕金华.
第一章 C语言概述 计算机公共教学部.
類別圖 方塊 (bricks) 背景 (bg) 技能 (skill) 位置 圖片 產生 移動 掉落 位置 圖片 儲存 消除 畫出 規則 效果
2015/Spring 跨平台行動程式進階應用 王派洲老師
絕對不等式 課堂練習2 (算幾不等式).
工作室课题 小车走迷宫 大连民族学院 电工电子实验教学中心.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
手持式裝置之隨身照護應用 Android開發環境設定 鐘國家 老師.
題目:十六對一多工器 姓名:李國豪 學號:B
Chapter 5 迴圈.
Visual C++ introduction
資料結構設計與C++程式應用 Fundamentals of Data Structures and Their Applications Using C++ 第3章 佇列 資料結構設計與C++程式應用.
101北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
1. 檔案File  開新New  檔案Empty File (再另存新檔D:\hello.c)
第12章 從C到C++語言 12-1 C++語言的基礎 12-2 C++語言的輸出與輸入 12-3 C++語言的動態記憶體配置
程式撰寫流程.
Echo Server/Client Speaker:Fang.
Visual Basic 物件導向程式設計簡介.
作品基本信息 作品名称: 广告主名称: 活动起始时间: 广告主服务年限:.
Java 程式設計 講師:FrankLin.
Digital Image Processing 數位影像處理
電腦攻擊與防禦 使用電腦教室VMware軟體說明.
計數式重複敘述 for 迴圈 P
程式設計實習課(四) ----C 函數運用----
標籤、按鈕、工具列、狀態列 (Labels, Buttons, Tool Strips, and Status Strips)
Pocket Access.
MATLAB 程式設計入門篇 二維平面繪圖 (part2)
PowerPoint 2019/4/9.
HTML – 超連結與圖片 資訊教育.
讓Emulator可以 使用Android Market
打地鼠(陣列版).
徵才說明會 安泰證券營業部經理: 陳文賢 2019/4/22.
期末考.
GUI Title and GUI Status
挑戰C++程式語言 ──第8章 進一步談字元與字串
GridView.
GridView操作 (II).
Chap 5 函数 5.1 计算圆柱体积 5.2 使用函数编写程序 5.3 变量与函数.
7.1 C程序的结构 7.2 作用域和作用域规则 7.3 存储属性和生存期 7.4 变量的初始化
C qsort.
4.19 Fsys _ SLOW MODE HT66F70A.
C++程式設計入門 變數與運算子 作者:黃建庭.
项目1 C程序设计起步 学习目标: 通过该项目你可以知道: C语言的用途。 C语言的基本符号和关键字。 C语言程序的结构及特点。
第二章 类型、对象、运算符和表达式.
Video 影像 (VideoPlayer 影像播放器、Camcorder 錄影機) 靜宜大學資管系 楊子青
挑戰C++程式語言 ──第7章 輸入與輸出.
MiRanda Java Interface v1.0的使用方法
PROGRAM 7 SQUARE E. Angel.
本节内容 函数嵌套调用的内存布局 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
程式移植.
Chapter 15 檔案存取 LabVIEW中的檔案存取函數也可將程式中的資料儲存成Excel或Word檔。只要將欲存取的檔案路徑位址透過LabVIEW中的路徑元件告訴檔案存取函數後,LabVIEW便可將資料存成Excel或Word檔;當然也可以將Excel或Word檔的資料讀入LabVIEW的程式中。
北一女中 資訊選手培訓營 妳不可不了解的指標 Nan.
選擇性結構 if-else… switch-case 重複性結構 while… do-while… for…
Project 4 The Dragon Curve
班級:博碩子一甲 授課老師:鐘國家 助教:陳國政
查表法&電腦IO Port二進制轉七段顯示器
Cloud Training Material- 事件 Sherman Wang
Activity的生命週期: 播放音樂與影片 靜宜大學資管系 楊子青
小畫家教學 電子版儲存於 學校網頁/學科資訊/電腦科
LED Pili LED 中州技術學院 電子系 副教授 余文俊.
基本資料型態 變數與常數 運算子 基本的資料處理 授課:ANT 日期:2014/03/03.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
Array(陣列) Anny
Unix指令4-文字編輯與程式撰寫.
隨機函數.
ABAP Basic Concept (2) 運算子 控制式與迴圈 Subroutines Event Block
InputStreamReader Console Scanner
Presentation transcript:

OpenCV程式開發(II) 林道通 教授 多媒體技術與應用 5/16

OpenCV讀取影片 顯示一個視窗,顯示圖片在視窗中 # include→ <opencv/cv.h>與<opencv/highgui.h>與<stdio.h> 與<stdlib.h> 宣告一個CvCapture 型態的變數:Capture 並宣告成空的 宣告CvCapture 型態要記得釋放

OpenCV讀取影片 宣告一個char陣列來儲存欲讀取之影片之檔名 此時,我們要讀取的影片的檔名已經存在InputFileName裡 了,然後用cvCreateFileCapture function來載入影片到 Capture裡面 CvCapture* cvCreateFileCapture(const char* filename); filename:檔案名稱

OpenCV讀取影片 如果Capture沒有讀到欲讀取之影片,則印出開影片失敗的 文字訊息 例如:找不到圖片、檔名錯誤

OpenCV讀取影片 影片其實是連續的圖片,所以仍是要用IplImage來存影片,所 以要再宣告一個IplImage,並宣告成空的 要新創一個視窗來顯示CurrentFrame,有創視窗就要記得 Destroy

OpenCV讀取影片 使用 while 迴圈透過 cvQueryFrame function 將 frame一張一張讀出來。 IplImage* cvQueryFrame(CvCapture* capture) 並且使用 cvShowImage 將每張 frame 顯示在 Output window 上 這樣就可以將影片讀出來

OpenCV影片灰階化 在main宣告一個IplImage存灰階圖 在while迴圈內給GrayFrame跟CurrentFrame一樣的長寬 記得結束前要release GrayFrame

OpenCV影片灰階化 在while迴圈內,cvCreateImage之後 將CurrentFrame一個pixel一個pixel的讀出來,並一個pixel一個 pixel的寫入欲輸出的GrayFrame中

課堂練習:影片二值化 設閥值(threshold)為125: y>=125:設為255 y<125:設為0

OpenCV影片放大

OpenCV影片放大 在main宣告EnlargeFrame,並在while迴圈內實作影片放大 注意: EnlargeFrame為 CurrentFrame的兩倍大小 記得結束時要release EnlargeFrame 在main宣告EnlargeFrame,並在while迴圈內實作影片放大

OpenCV滑鼠事件 宣個一個onMouse function 四個參數分別代表: 事件回傳代號(int Event) 座標(int x,int y) flags代號(int flags) Mouse事件的代號名稱(param)

OpenCV滑鼠事件 一定要搭配一個callback function才能回傳指定視窗所發生的 滑鼠是件 cvSetMouseCallback(const char* windowName, CvMouseCallback onMouse, void* param=NULL) windowName = 滑鼠事件所監聽的視窗 onMouse = 滑鼠事件名稱

OpenCV滑鼠事件 在Global宣告兩個cvPoint結構Point1、Point2,並宣告一個全域變 數Mode來控制順序

OpenCV滑鼠事件 在onMouse Funtion中記錄座標值(兩點)

OpenCV滑鼠事件 event parameter: CV_EVENT_MOUSEMOVE Mouse movement CV_EVENT_LBUTTONDOWN Left button down CV_EVENT_RBUTTONDOWN Right button down CV_EVENT_MBUTTONDOWN Middle button down CV_EVENT_LBUTTONUP Left button up CV_EVENT_RBUTTONUP Right button up CV_EVENT_MBUTTONUP Middle button up CV_EVENT_LBUTTONDBLCLK Left button double click CV_EVENT_RBUTTONDBLCLK Right button double click CV_EVENT_MBUTTONDBLCLK Middle button double click

OpenCV畫框 在main 的while迴圈中加入mode==3的判斷式,使用cvRectangle function畫框 cvRectangle(CvArr* img, CvPoint pt1, CvPoint pt2, CvScalar color, int thickness=1, int lineType=8, int shift=0) img = 欲畫框的影像 pt1, pt2 = 框的左上角與右下角 color = 框的顏色 thickness = 線的粗細 lineType = 線的形式

OpenCV切割ROI區域 在main宣告 int 變數 width, height, XMin, XMax, Ymin, YMax 及一張IplImage來存放切割下的畫面

OpenCV切割ROI區域 在mode==3的判斷式中 使用變數width, height來存切割畫面的寬高(要記得取絕對值), 得到寬高後就可以配置IplImage的大小

OpenCV切割ROI區域 接續上面,判斷Point1,Point2在X座標及Y座標的位置

OpenCV切割ROI區域 接續上面,將畫面從原本的CurrentFrame中切出來,存放在先 前宣告的CutFrame中,並show出來

OpenCV按R鍵重畫ROI區域 在KeyIn = cvWaitKey()之後,若使用者按下 r 或是 R,則將 Mode設為0即可重畫,記得把視窗Destory,這樣才不會看到上 一張的圖

OpenCV按S鍵儲存ROI區域 先在main宣告int counter來紀錄儲存張數 在KeyIn = cvWaitKey()之後,若使用者按下 s 或是 S,使用 cvSaveImage將CutFrame儲存下來 cvSaveImage(const char* filename, const CvArr* image) Filename = 儲存檔名 image = 欲儲存的影像

課堂練習:將ROI切割區域轉成二值化

Mosaic 馬賽克

Mosaic 馬賽克 在main function宣告一個影像 MosaicFrame 兩個變數 MosaicMode, MosaicParameters MosaicMode 記錄是否為馬賽克模式,預設0 MosaicParameters 為馬賽克影像mask大小

按下M鍵,啟用/取消 Mosaic 馬賽克 在KeyIn = cvWaitKey()之後,當使用者按下M或m 若MosaicMode=0,則改變MosaicMode=1,且將CutFrame 的寬高、深度給予MosaicFrame。 若MosaicMode=1,則改變MosaicMode=0,且release MosaicFrame且關閉視窗。

Mosaic 馬賽克 在if(mode==3)內,CutFrame之後 判斷 MosaicMode 是true或是false,使用mask由左至右、由 上至下給予MosaicFrame Pixel值

Mosaic 馬賽克

課堂練習:將框選起來的區域直接做馬賽克

HW:將ROI區域縮小+合併+上下顛倒