【天问】存于咸阳宫内,为秦始皇的配剑。当一个人成为天下至尊,权利已是他手中最锋利的宝剑,所谓“天问”不正是一种举剑问天、舍我其谁的王者气势的体现吗?
【鼠标操作】
1、回调函数
CV_EXPORTS void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata = 0);
回调函数的作用:每次在窗口上进行鼠标操作,都会调用此函数,放在waitKey()函数前面,保证能够回调。
函数参数介绍:
const string& winname:windows视窗名称,对名为winname的视窗进行鼠标监控。
MouseCallback onMouse:鼠标响应处理函数,监听鼠标的点击,移动,松开,判断鼠标的操作类型,并进行响应的函数处理。
void* userdata = 0 :鼠标响应处理函数的ID,与鼠标相应处理函数相匹配就行,暂时只用到默认为0的情况。
操作实例
namedWindow("src", WINDOW_AUTOSIZE);//WINDOW_AUTOSIZE:系统默认,显示自适应
src = imread("0.jpg", 1);//1:为原图颜色,0:为灰度图,黑白颜色
src.copyTo(dst);
setMouseCallback("src", on_mouse, 0);
实例解析
(1)src:创建的窗口的名字,跟namedWindow("src", WINDOW_AUTOSIZE);是对应的,如果不先创建一个窗口,那么后面的鼠标就没法操作了。
(2)on_mouse:自己创建的一个鼠标响应处理函数名(调用函数),跟一般的调用函数一样。
【渊虹】人有信仰,剑亦有剑魂,当天下第一剑客盖聂,遇到天问之下最著名的宝剑渊虹,绝世搭档由此诞生。从此,盖聂无论是帮助秦始皇消灭刺杀者,还是反叛秦国流亡天下,渊虹都一直与他为伴,如今虽断,不过相信总有一天渊虹能够完
2、鼠标响应处理函数
void on_mouse(int event,int x,int y,int flags,void *ustc)
函数参数介绍:
int event:鼠标操作时间的整数代号,在opencv2.4.5中,event鼠标事件总共有10种,从0-9依次代表如下:
#define CV_EVENT_MOUSEMOVE 0 滑动
#define CV_EVENT_LBUTTONDOWN 1 左键点击
#define CV_EVENT_RBUTTONDOWN 2 右键点击
#define CV_EVENT_MBUTTONDOWN 3 中间点击
#define CV_EVENT_LBUTTONUP 4 左键释放
#define CV_EVENT_RBUTTONUP 5 右键释放
#define CV_EVENT_MBUTTONUP 6 中间释放
#define CV_EVENT_LBUTTONDBLCLK 7 左键双击
#define CV_EVENT_RBUTTONDBLCLK 8 右键双击
#define CV_EVENT_MBUTTONDBLCLK 9 中间释放
int x,int y:代表鼠标位于窗口的(x,y)坐标位置,窗口左上角默认为原点,向右为x轴,向下为y轴;
int flags:代表鼠标的拖拽事件,以及键盘鼠标联合事件,总共有32种事件,依次如下:
#define CV_EVENT_FLAG_LBUTTON 1 左键拖拽
#define CV_EVENT_FLAG_RBUTTON 2 右键拖拽
#define CV_EVENT_FLAG_MBUTTON 4 中间拖拽
#define CV_EVENT_FLAG_CTRLKEY 8 (8~15)按Ctrl不放事件
#define CV_EVENT_FLAG_SHIFTKEY 16 (16~31)按Shift不放事件
#define CV_EVENT_FLAG_ALTKEY 32 (32~39)按Alt不放事件
void *ustc:函数参数的编号(暂时用不到)。
操作实例
if (event == EVENT_LBUTTONDOWN)
{ //左键按下;
}
else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON))
{ // 鼠标移动;
}
else if (event == EVENT_LBUTTONUP)
{ //左键弹起;
}
鼠标操作除了用if().......else if()............之外,还可以用switch() case x:break;来写。
【太阿】儒家圣使伏念的佩剑。据剑谱介绍,太阿乃诸侯威道之剑,其剑气存于天地之间,只有内心之威才能催动剑气之威。太阿的现任主人儒家掌门伏念,器宇轩昂,乃是非常有威仪之人,而他独创圣王剑法,与太阿的剑气可谓相得益彰,能够找到这样一位主人,乃太阿之幸。
【显示坐标】
函数实例
sprintf(temp_1,"x:%d,y:%d",x,y); putText(src,temp_1,Point(x,y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(0,255,255));
实例解析
(1)把要输出的内容给字符串(数组)
sprintf(temp_1,"x:%d,y:%d",x,y);
temp_1:字符串(char temp_1[20];)
x,y:要输出到图像上的坐标值
(2)把文本输出到图像上
putText(src,temp_1,Point(x,y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(0,255,255));
src:要显示的图像
temp_1:字符串(char temp_1[20];)
Point(x,y):要输出到图像上的位置
FONT_HERSHEY_SIMPLEX:字体
0.5:大小,可以随意改,找最合适的
Scalar(0,255,255):黄色
【干将莫邪】 干将、莫邪是两把剑,但是没有人能分开它们。干将、莫邪是两个人,同样,也没有人能将他们分开。干将、莫邪是干将、莫邪铸的两把剑。干将是雄剑,莫邪是雌剑。干将、莫邪是一把挚情之剑。
【画线操作】
画线使用line函数就简单多了,只需要知道起点和终点就行了。
函数实例
line(src, pre_pt, cur_pt, Scalar(0, 255,0), 1, CV_AA, 0);
函数解析
src:源图像
pre_pt:起点坐标(第一次按下鼠标产生的点)
cur_pt:终点坐标(鼠标移动后,最后停下的点)
Scalar(0, 255,0):线的颜色
0为黑色,255为白色,由RGB在一起组合成各种颜色
颜色组合列表:
Scalar(0, 0,0)---------------------------------------黑色
Scalar(0, 0,255)------------------------------------红色
Scalar(0, 255,0)------------------------------------绿色
Scalar(255,0,0)-------------------------------------蓝色
Scalar(255, 255,0)---------------------------------青色
Scalar(255, 0,255)---------------------------------紫色
Scalar(0, 255,255)---------------------------------黄色
Scalar(255, 255,255)------------------------------白色
thickness:线条宽度
lineType:线型
线型列表:
8(or omitted) - 8-connected line.
4 - 4-connected line.
CV_AA- antialiased line.
【雪霁】雪霁乃道家历代供奉的名剑,因道家门派分立,被各派轮流供奉,如今为人宗掌门逍遥子佩剑。雪霁是目前已公布十大名剑中最“纤细”的一柄,这正符合道家思想中以柔克刚的理念,同时,其因纤细,更不容易给对手造成致命的伤口,也是道家仁爱之心的一种体现。因此,雪霁与其说是一柄剑,倒不如说是一种道家精神的象征。
【画圆操作】
由于鼠标操作时,左键按下要有一个标记,也就一点,而我们通常的做法就是画一个半径小点的圆做点。
函数实例
circle(src, cur_pt, 3, Scalar(255,0, 0), CV_FILLED, CV_AA, 0);
实例解析
src:源图像
cur_pt:实时坐标点,作为圆的圆心
radius:圆的半径
Scalar(255,0, 0):颜色,跟上面一样
thickness:线粗,如果值是正,圆外轮廓的厚度,如果值是负,表示要绘制一个填充圆
lineType:线类型
【水寒】大师徐夫子专门根据高渐离绝技“易水寒”特点所铸,可以在他的内力催动下凝水为冰,威力更甚,因此水寒剑虽名列第七,但是对于高渐离来说却是最合适的。
【具体操作流程】
【湛卢】湛泸是一把剑,更是一只眼睛。湛泸:湛湛然而黑色也。这把通体黑色浑然无迹的长剑让人感到的不是它的锋利,而是它的宽厚和慈祥。它就像上苍一只目光深邃、明察秋毫的黑色的眼睛,注视着君王、诸侯的一举一动。君有湛泸剑是一把仁道之剑。
【程序源码】
/**
@ 1、读取读片
@ 2、显示图片,延迟卡死
@ 3、一直进行鼠标操作,进行绘图,显示图片
*/
#include<opencv2/core/core.hpp>
#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<stdio.h>
#include <string>
using namespace cv;Mat src;
Mat dst;void on_mouse(int event, int x, int y, int flags, void* ustc)
{static Point pre_pt ;static Point cur_pt ;char temp_1[20];// 如果要在图片的任意位置作为起始点,这两步就不需要了//pre_pt=Point(-1,-1);//cur_pt=Point(-1,-1);if (event == CV_EVENT_LBUTTONDOWN){dst.copyTo(src);pre_pt = Point(x, y);//sprintf(temp_1,"x:%d,y:%d",x,y);//xiaolei=Rect(x1,y1,0,0);//putText(src,temp_1,Point(x,y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(255,255,255));circle(src, pre_pt, 0.5, cvScalar(255, 0, 0), CV_FILLED, CV_AA, 0);imshow("src", src);}else if (event == EVENT_MOUSEMOVE && (flags & EVENT_FLAG_LBUTTON)){dst.copyTo(src);cur_pt = Point(x, y);sprintf(temp_1,"x:%d,y:%d",x,y);//xiaolei=Rect(x1,y1,0,0);putText(src,temp_1,Point(x,y),FONT_HERSHEY_SIMPLEX,0.5,Scalar(0,255,255));line(src, pre_pt, cur_pt, cvScalar(0, 255,0), 1, CV_AA, 0);imshow("src", src);}else if (event == CV_EVENT_LBUTTONUP){dst.copyTo(src);cur_pt = Point(x, y);sprintf(temp_1,"x:%d,y:%d",x,y);//xiaolei=Rect(x1,y1,0,0);putText(src,temp_1,Point(x,y),FONT_HERSHEY_SIMPLEX,0.4,Scalar(0,255,255));circle(src, cur_pt, 3, cvScalar(255,0, 0), CV_FILLED, CV_AA, 0);line(src, pre_pt, cur_pt, cvScalar(0, 255,0), 1, CV_AA, 0);imshow("src", src);}
}int main()
{//注意:这一步必须要有,不然进行不了鼠标操作namedWindow("src", WINDOW_AUTOSIZE);//WINDOW_AUTOSIZE:系统默认,显示自适应src = imread("0.jpg", 1);//1:为原图颜色,0:为灰度图,黑白颜色src.copyTo(dst);setMouseCallback("src", on_mouse, 0);imshow("src", src);waitKey(0);return 0;
}
【赤霄】汉高祖刘邦斩蛇所用之剑。这是一把饰有七彩珠、九华玉的寒光逼人、刃如霜雪的宝剑,剑身镌刻两个篆字:赤霄。汉高祖刘邦凭此剑于大泽怒斩白蛇,开始其帝王一生。赤霄剑是一把帝道之剑。
【效果图】
参考博客:
http://blog.csdn.net/thefutureisour/article/details/7523925
http://www.cnblogs.com/techdreaming/p/5193835.html
http://blog.csdn.net/NCHFGFB/article/details/51516030
【凌虚】剑谱排名第十位宝剑凌虚,为齐鲁三杰中张良的佩剑。此剑的名字也侧面反映了张良的能力,身怀经天纬地之才,胸藏救世济民之志。凌虚虽为神兵利器,但是却未曾沾染血腥,以剑载志,以剑明心,才是张良的真正目的。