Opencv笔记 v1.0

[toc]

2019年3月8日21点48分 杨军伟学习笔记


一、下载Opencv

1、官网下载(测试部分无法运行) 巨慢
2、https://opencv.org/releases.html
3、(3.2以下版本)https://blog.csdn.net/love666666shen/article/details/76449155
4、cmake下载:https://cmake.org/download/

二、安装Opencv

  • 一、添加环境变量:目录\opencv\build\x86\vc11\bin 或者
    目录\opencv\build\x64\vc11\bin

  • 二、在【通用属性】 ->【VC++目录】 ->【包含目录】中 添加:

    目录\opencv\build\include
    目录\opencv\build\include\opencv
    目录\opencv\build\include\opencv2

    三、工程库(lib)目录的配置 【VC++目录】 ->【库目录】中 添加:

    目录\opencv\build\x86(64)\vc11\lib

    四、添加依赖库

  • 在【链接器】->【常规】->【附加库目录】选择lib目录 如:目录\opencv\build\x64\vc14\lib

  • 在【链接器】->【输入】->【附加依赖项】中添加库文件名称(带’d’的时DEbug中用的)
    opencv_world320.lib opencv_world320d.lib

    1、OpenCV 3.2.0附加依赖项库 网上找的不能用
    解决方法:到安装目录\opencv\build\x64\vc14\lib
                找到对应的lib文件添加,我只找到目录下的2个 添加暂时可运行(后续验证就是这两个就行)
    2、由于找不到 opencv_world320.dll,无法继续执行代
    解决方法:到安装目录\opencv\build\x64\vc14\bin
                复制里面的dll文件到 C:\Windows\System32  (x64)
                                C:\Windows\SysWOW64   (x86)32位系统

    五、其他情况不安全代码

    将宏添加到 【c/c++】->【预处理器】->【预处理器定义中】

    测试代码://图片放在项目的二级目录下
    #include <opencv2/opencv.hpp>
    using namespace cv;
    int main(void)
    {

    Mat img=imread("1.jpg");
    imshow("test",img);
    waitKey(5000);

    }
    图片打开成功

    三、一般类与函数

  • 1、Mat类

    2、imread           读取图片,指定读取的颜色方式。
    3、imshow           在指定名称的窗口显示指定图片
    4、namedWindow      创建窗口
    5、imwrite          向文件中写入一张图片
    6、VideoCapture 类:对视频进行读取显示,以及调用摄像头。
    7、定义ROI的两种方法

1、Mat类

用于保存图像以及其他矩阵数据的数据结构,默认情况下其尺寸为0.

2、imread//读数据

CV_EXPORTS_W Mat imread( const String& filename, int flags = IMREAD_COLOR );
读取图片,指定读取的颜色方式。
filename:路径名
flags: 载入标识,指定加载图像的颜色类型,
默认是1,返回彩色图像,
为0时 返回灰度图像。
读取路径格式说明:https://blog.csdn.net/xingchenbingbuyu/article/details/51375078

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main(int argc,char* argv[])
{
	Mat img;
//以下六种合法
	//-- 1 --双右斜线法
	//string imgpath = "C:\\Users\\bingbuyu\\Pictures\\photo\\miao1.jpg";
	//-- 2 --双左斜线法
	//string imgpath = "C://Users//bingbuyu//Pictures//photo//miao1.jpg";
	//-- 3 --单左斜线法
	//string imgpath = "C:/Users/bingbuyu/Pictures/photo/miao1.jpg";
	//-- 4 --以上三种混合法
	//string imgpath = "C:/Users//bingbuyu\\Pictures//photo//miao1.jpg";
	//-- 5 --相对路径法
	//string imgpath = "miao.jpg";
	//-- 6 --命令行参数法
	string imgpath = argv[1];

	img = imread(imgpath, 1);
	imshow("img", img);

	waitKey(0);
	return 0;
}

3、imshow//显示

CV_EXPORTS_W void imshow(const String& winname, InputArray mat);
在指定名称的窗口显示指定图片
winname:显示的窗口名称。
mat: 显示的图像。

4、 namedWindow//创建窗口

CV_EXPORTS_W void namedWindow(const String& winname, int flags = WINDOW_AUTOSIZE);

winname: 窗口名称(与imread中的参数1名称一致时,则imread使用该窗口)
flags : 显示方式

WINDOW_NORMAL = 0x00000000, //!< the user can resize the window (no constraint) / also use to switch a fullscreen window to a normal size.
WINDOW_AUTOSIZE = 0x00000001, //!< the user cannot resize the window, the size is constrainted by the image displayed.
WINDOW_OPENGL = 0x00001000, //!< window with opengl support.
WINDOW_FULLSCREEN = 1, //!< change the window to fullscreen.
WINDOW_FREERATIO = 0x00000100, //!< the image expends as much as it can (no ratio constraint).
WINDOW_KEEPRATIO = 0x00000000, //!< the ratio of the image is respected.
WINDOW_GUI_EXPANDED=0x00000000, //!< status bar and tool bar
WINDOW_GUI_NORMAL = 0x00000010, //!< old fashious way

5、向文件中写入一张图片。

  • CV_EXPORTS_W bool imwrite( const String& filename, InputArray img,

    const std::vector<int>& params = std::vector<int>());

    向文件中写入一张图片。

    filename:图片的名字,带后缀。支持转换成不同的格式。
    img     :mat格式的图像。

6、对视频进行读取显示,以及调用摄像头。

  • VideoCapture 类:

    (1)先实例再初始化
        VideoCapture capture;
        capture.open("1.avi");              //摄像头:capture.open(0);
    (2) 实例的同时进行初始化
        VideoCapture capture("1.avi");      //摄像头: VideoCapture capture(0);
    while(1)
    {
        Mat frame;                          //定义一个Mat变量,用于存储每一帧的图像
        captrue>>frame;                     //读取当前帧
        imshow("test",frame);
        waitKey(33);
    }

7、定义ROI的两种方法

(1)使用Rect,指定矩形的左上角坐标和矩形的长宽,定义一个矩形区域。
Mat iamgrROI = Image(Rect(x,y,xleng,yleng));
(2)使用Range 指定
Mat iamgrROI = Image(Range(500,500+xleng),Range(250,+yleng));
列子:
Mat img1 = imread(“1.jpg”);
Mat img2 = imread(“2.jpg”);
Mat mask = imread(“2.jpg”);
Mat frameROI = img1(Rect(10, 20, img2.cols, img2.rows));
img2.copyTo(frameROI, mask);
imshow(“ROI”,img1);
waitKey(3000);


8、图像的线性混合(两张图片大小一致)

Mat result_img;
double alpha = 0.5;
double beta = (1 - alpha);
addWeighted(img1,alpha,img2,beta,0.0,result_img);
imshow("线性混合效果图", result_img);

9、滑动条的使用

const int G_maxalpha_value_Slider = 100;
int G_AlphaValue_Slider=50;
double G_AlphaValue;
double G_betaValue;
#define WINDOW_NAME "线性混合"
Mat img_1= imread("2.jpg");
Mat img_2= imread("3.jpg");
Mat img_result;
void on_Trackbar(int) {
    G_AlphaValue = (double)G_AlphaValue_Slider / G_maxalpha_value_Slider;
    G_AlphaValue = 1.0 - G_AlphaValue;
    addWeighted(img_1, G_AlphaValue, img_2, G_AlphaValue, 0.0, img_result);

    imshow(WINDOW_NAME, img_result);
}
//mian()中
namedWindow(WINDOW_NAME);
cvCreateTrackbar("bar", WINDOW_NAME,&G_AlphaValue_Slider,G_maxalpha_value_Slider, on_Trackbar);
on_Trackbar(G_AlphaValue_Slider);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值