亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

Opencv使用鼠標任意形狀的摳圖

2020-01-26 13:27:16
字體:
來源:轉載
供稿:網友

本文實例為大家分享了Opencv使用鼠標任意形狀摳圖的具體代碼,供大家參考,具體內容如下

主要的方法思路是:首先利用鼠標在圖上畫任意形狀,利用掩碼將任意形狀摳出來

主要難點是怎么填充,因為鼠標在畫線的時候,滑動越快,點是不連續的,利用floodFill和drawContours都是沒有辦法進行填充的,從另一個方面想,一個面是由很多個點組成的,雖然鼠標滑動保存下來的就是一系列點,可以利用這一系列點構成一個面,利用面的性質進行填充就比較簡單了。

一、首先使用鼠標點擊事件,鼠標點擊事件的函數為:

void on_mouse(int event, int x, int y, int flags, void* ustc)

常見的鼠標事件有:

event事件有: 

CV_EVENT_MOUSEMOVE   =0,  //鼠標移動CV_EVENT_LBUTTONDOWN  =1,  //按下左鍵CV_EVENT_RBUTTONDOWN  =2,  //按下右鍵CV_EVENT_MBUTTONDOWN  =3,  //按下中鍵CV_EVENT_LBUTTONUP   =4,  //放開左鍵CV_EVENT_RBUTTONUP   =5,  //放開右鍵CV_EVENT_MBUTTONUP   =6,  //放開中鍵CV_EVENT_LBUTTONDBLCLK =7,  //左鍵雙擊CV_EVENT_RBUTTONDBLCLK =8,  //右鍵雙擊CV_EVENT_MBUTTONDBLCLK =9,  //中鍵雙擊CV_EVENT_MOUSEWHEEL   =10, //滾輪滾動CV_EVENT_MOUSEHWHEEL  =11  //橫向滾輪滾動

flag事件有:

CV_EVENT_FLAG_LBUTTON  =1,  //左鍵拖拽CV_EVENT_FLAG_RBUTTON  =2,  //右鍵拖拽CV_EVENT_FLAG_MBUTTON  =4,  //中鍵拖拽CV_EVENT_FLAG_CTRLKEY  =8,  //按住CTRL拖拽CV_EVENT_FLAG_SHIFTKEY =16, //按住Shift拖拽CV_EVENT_FLAG_ALTKEY  =32  //按住ALT拖拽

首先鼠標在圖像上的操作有三個步驟:

1、按下左鍵,建立一個起點

if (event == CV_EVENT_LBUTTONDOWN) { //畫起點 }

2、按下左鍵的同時,進行左鍵拖拽畫線

else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON)) { //在拖動過程中畫線 }

3、放下左鍵,起點與當前點進行連接

else if (event == CV_EVENT_LBUTTONUP) {  //在結束之后進行起點和終點的連接 }

二、對一系列點組成的封閉圖形進行填充

采用多邊形填充函數fillpoly 取一系列隊的首地址,進行多邊形的填充,vctPoint保存鼠標滑過的一系列的點

const cv::Point * ppt[1] = { &vctPoint[0] };//取數組的首地址 int len = vctPoint.size(); int npt[] = { len }; org.copyTo(maskImage); maskImage.setTo(cv::Scalar(0,0, 0, 0)); cv::fillPoly(maskImage, ppt, npt, 1, cv::Scalar(0,255, 255, 255));

完整的代碼如下:

#include <iostream> #include <vector>#include <opencv.hpp>#include <opencv2/opencv.hpp>#include <opencv2/highgui/highgui.hpp> #include <opencv2/core/core.hpp> static std::vector<std::vector<cv::Point>> vctvctPoint;cv::Mat org = cv::imread("images/kaola.jpg");cv::Mat dst, maskImage;static std::vector<cv::Point> vctPoint;static cv::Point ptStart = (-1, -1); //初始化起點static cv::Point cur_pt = (-1, -1); //初始化臨時節點char temp[16];  void on_mouse(int event, int x, int y, int flags, void *ustc)//event鼠標事件代號,x,y鼠標坐標,flags拖拽和鍵盤操作的代號 { if (event == CV_EVENT_LBUTTONDOWN) { std::cout << "x:" << x << " y:" << y << std::endl; ptStart = cv::Point(x, y); vctPoint.push_back(ptStart);  cv::circle(org, ptStart, 1, cv::Scalar(255, 0, 255), CV_FILLED, CV_AA, 0); cv::imshow("圖片", org); //cv::putText(tmp, temp, ptStart, cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0, 0), 1, 8); } else if (event == CV_EVENT_MOUSEMOVE && (flags & CV_EVENT_FLAG_LBUTTON)) { std::cout << "x:" << x << " y:" << y << std::endl; cur_pt = cv::Point(x, y); cv::line(org, vctPoint.back(), cur_pt, cv::Scalar(0, 255, 0, 0), 1, 8, 0); cv::circle(org, cur_pt, 1, cv::Scalar(255, 0, 255), CV_FILLED, CV_AA, 0); cv::imshow("圖片", org); vctPoint.push_back(cur_pt); //cv::putText(tmp, temp, cur_pt, cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0, 0)); } else if (event == CV_EVENT_LBUTTONUP) {  std::cout << "x:" << x << " y:" << y << std::endl; cur_pt = cv::Point(x, y); cv::line(org, ptStart, cur_pt, cv::Scalar(0, 255, 0, 0), 1, 8, 0); cv::circle(org, cur_pt, 1, cv::Scalar(255, 0, 255), CV_FILLED, CV_AA, 0); cv::imshow("圖片", org); vctPoint.push_back(cur_pt); vctvctPoint.push_back(vctPoint);  //把點構成任意多邊形進行填充 const cv::Point * ppt[1] = { &vctPoint[0] };//取數組的首地址 int len = vctPoint.size(); int npt[] = { len }; // cv::polylines(org, ppt, npt, 1, 1, cv::Scalar(0,0, 0, 0), 1, 8, 0);   org.copyTo(maskImage); maskImage.setTo(cv::Scalar(0,0, 0, 0)); cv::fillPoly(maskImage, ppt, npt, 1, cv::Scalar(0,255, 255, 255));  org.copyTo(dst ,maskImage); cv::imshow("摳圖",dst); cv::waitKey(0); }}int main(){ //鼠標點擊 cv::namedWindow("圖片");//定義一個img窗口  cv::setMouseCallback("圖片", on_mouse, 0);//調用回調函數  cv::imshow("圖片", org); cv::waitKey(0); return 0;}

效果如下所示:


以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97精品在线观看| 欧美与欧洲交xxxx免费观看| 久久久国产91| 久久精品免费电影| 亚洲国产精品视频在线观看| 国产精品久久久久久久9999| 中文字幕欧美日韩在线| 亚洲一区999| 亚洲欧美国产日韩天堂区| 丝袜亚洲另类欧美重口| 国产视频久久久久| 日韩动漫免费观看电视剧高清| 国产精品678| 亚洲一区二区三区在线免费观看| 日本老师69xxx| 亚洲免费成人av电影| 国产精品欧美一区二区三区奶水| 久久久久一本一区二区青青蜜月| 久久99热精品| 欧美日韩国产一中文字不卡| 九九精品视频在线| 国产一区二区精品丝袜| 91亚洲精品一区二区| 亚洲一区二区自拍| 综合av色偷偷网| 精品无人区太爽高潮在线播放| 欧美一性一乱一交一视频| 国内伊人久久久久久网站视频| 久久亚洲一区二区三区四区五区高| 蜜臀久久99精品久久久无需会员| 色悠久久久久综合先锋影音下载| 91午夜理伦私人影院| 国产不卡精品视男人的天堂| 激情亚洲一区二区三区四区| 欧美一区二粉嫩精品国产一线天| 国产专区精品视频| 日韩视频在线免费| 国产精品日本精品| 美女精品视频一区| 中文综合在线观看| 亚洲女人被黑人巨大进入al| 国内精品久久久久久影视8| 亚洲午夜久久久影院| 亚洲四色影视在线观看| 久久99久国产精品黄毛片入口| 中文字幕成人精品久久不卡| 中文字幕国产亚洲2019| 欧美中文字幕在线视频| 色多多国产成人永久免费网站| 亚洲自拍偷拍色片视频| 性色av一区二区三区| 欧美高跟鞋交xxxxxhd| 国产精品中文字幕在线| 日韩免费观看网站| 日韩精品视频免费在线观看| 国产91精品青草社区| 欧美色图在线视频| 夜夜狂射影院欧美极品| 国产精品视频永久免费播放| 91欧美精品成人综合在线观看| 2019中文字幕免费视频| 精品五月天久久| 亚洲国产欧美一区二区丝袜黑人| 欧美在线观看网址综合| 久久成人精品一区二区三区| 国产精品一区专区欧美日韩| 亚洲女同性videos| 亚洲经典中文字幕| 久久韩国免费视频| 色哟哟入口国产精品| 精品久久久久久电影| 亚洲男人的天堂在线播放| 国产精品xxx视频| 欧美老少配视频| 久久久噜噜噜久久中文字免| 成人免费视频xnxx.com| 91精品在线一区| 超碰91人人草人人干| 色多多国产成人永久免费网站| 欧美日韩一区二区在线播放| 欧美性生活大片免费观看网址| 欧美国产日韩精品| 日韩av在线一区| 黄色成人av在线| 57pao成人永久免费视频| 久久久精品欧美| 青青精品视频播放| 91精品国产自产在线观看永久| 2020久久国产精品| 亚洲成人精品久久| 成人国产在线视频| 曰本色欧美视频在线| 亚洲美腿欧美激情另类| 91精品在线国产| 日日骚久久av| 亚洲天堂第一页| 亚洲日本aⅴ片在线观看香蕉| 欧美国产精品人人做人人爱| 精品国产乱码久久久久酒店| 九九精品视频在线观看| 久久成人综合视频| 国产一区二区色| 国产精品一区二区电影| 亚洲影视中文字幕| 日韩精品在线观看一区| 精品久久久久久久久中文字幕| 国产精品对白刺激| 久久中国妇女中文字幕| 岛国视频午夜一区免费在线观看| 久久亚洲精品毛片| 国产精自产拍久久久久久蜜| 国产成人综合一区二区三区| 97视频在线观看免费高清完整版在线观看| 最近2019中文免费高清视频观看www99| 久久福利视频导航| 97视频国产在线| 欧美精品在线观看| 日本一欧美一欧美一亚洲视频| 久久亚洲国产精品| 欧美一区二区三区图| 欧美日韩国产精品一区二区不卡中文| 国产日韩在线观看av| 91av在线免费观看视频| 国产亚洲欧美另类中文| 亚洲国内精品视频| 国产在线视频91| 81精品国产乱码久久久久久| 欧美专区在线视频| 91中文字幕一区| 日韩av免费在线观看| 亚洲美女激情视频| 久久精品夜夜夜夜夜久久| 久久久精品2019中文字幕神马| 亚洲天堂视频在线观看| 国产欧美精品在线播放| 日韩成人av在线| 欧美午夜片欧美片在线观看| 亚洲成人免费在线视频| 91精品啪在线观看麻豆免费| 91精品国产综合久久香蕉922| 久久噜噜噜精品国产亚洲综合| 国产成人综合亚洲| 日韩精品视频免费专区在线播放| 伊人久久综合97精品| 国产亚洲aⅴaaaaaa毛片| 成人做爽爽免费视频| 欧美日韩成人在线观看| 亚洲国产精品yw在线观看| 97超碰国产精品女人人人爽| 欧美一区三区三区高中清蜜桃| 亚洲午夜女主播在线直播| 国产精品一二三在线| 亚洲网在线观看| 日韩欧美中文字幕在线观看| 亚洲一区免费网站| 成人激情av在线| 欧美与黑人午夜性猛交久久久| 精品福利樱桃av导航| 亚洲精品永久免费精品| 日韩在线视频观看正片免费网站| 精品二区三区线观看| 亚洲久久久久久久久久久| 亚洲影影院av| 欧美高清视频一区二区|