您的位置:首页 > 运维架构

Opencv之imwrite()函数的用处

2017-03-15 19:06 316 查看
----------------------------------------





实践出真理!!!!!!-------------------------------------------------


【扯淡】

         本人在学习Opencv的时候,一直就瞧不上imwrite()函数,为什么呢?慢慢听我道来,一是我保存图片有什么用,我能实现功能就行了啥,不需要保存图片,二是我觉得保存图片没什么用就算了,还尼玛占内存。正当我满眼嫌弃的时候,写着博客突然想了一下,Ubuntu尼玛不好截图的嘛,我指的是单独的效果图,它是把整个屏幕截了,于是我就改了一下代码,加上了一个imwrite()函数,咦,效果不错哦,完美。以后写博客要图片就用这截了。

【盖聂】







【进入正题】

【函数实例】

bool imwrite(const string& filename, InputArray img, const vector<int>& params=vector<int>() )
【实例解析】

1、filename:需要写入的文件名,会自己创建(像imwrite("1.jpeg",src);这样)

2、img:要保存的图像

3、params:表示为特定格式保存的参数编码

注意:你要保存图片为哪种格式,就带什么后缀。

【附赠代码】



/*------------------------------------------------程序说明--------------------------------------------
* ----------------------------------------------创建者:磊神------------------------------------------
* ----------------
4000
-------------------创建时间:2017年3月15日--------------------------------
* ---------------------------开发环境:Opencv2.4.9+Ubuntu14.04--------------------------
* --------------------------------实现功能:鼠标画直线并显示坐标----------------------------
*/
#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);
src.copyTo(dst);//确保画线操作是在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,0));
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(255,0,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);
imwrite("1.jpg",src);//加了用来截图
src.copyTo(dst);
}
}

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;
}


【保存后的效果图】



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: