Duang Duang Duang Duang——计算机视觉的起步,win10+vs2019+c+++opencv环境让我在踩了不少小坑之后 完成了。。。下面带给大家最新的环境安装步骤
1,首先确定自己下好了vs2019版本
基本傻瓜操作,话说巨硬这两年也贼支持自己的编译器发展,引战:vs宇宙第一,网址请移步:https://visualstudio.microsoft.com/zh-hans/?rr=https%3A%2F%2Fwww.microsoft.com%2Fzh-cn%2F,建议下载社区版本,也就是Community的那个版本
我的版本如下图
2,安装opencv
没有安装包的,请移步:https://nchc.dl.sourceforge.net/project/opencvlibrary/4.1.0/opencv-4.1.0-vc14_vc15.exe
选一个位置安装,一路确定即可
3,配置环境变量
右键此电脑 -> 属性 -> 高级系统设置,点开以后有个环境变量,点开如图:
得到
用户变量中的path中添加C:\wook_tool\opencv\opencv\build\x64\vc15\bin这个路径,这个路径就是安装opencv完成后的文件夹,不要被我两个连续的opencv文件夹影响,我只是愚蠢的建立了一个名字为opencv的文件夹去安装opencv而已
如图:
然后在系统变量的path中添加这个路径
一路保存确定即可,至此,环境变量搞定
3,对opencv中文件进行移动
将安装文件夹的图中的三个文件copy到c盘的windows的System32文件夹中如图所示
这一步就ok了
4,在vs2019的c++工程中继承opencv
首先,我们先来在vs2019中建立一个c++工程
建好是这样子的
然后通过点解决方案资源管理器,右键->新建项,建立一个main函数,如图所示
然后将工具栏上的x86改成x65
再通过视图->其他窗口->属性管理器,让属性管理器的窗口显示在右侧
然后右击Debug|x64,点击添加新项目属性表,如图
点击后,将其命名为OpencvDebugx64,如图,并不是一定要命名成这个,自己随意命名即可,完成后点击添加,如图
它就出来了
然后双击我们刚才建立的这个选项会出现如图所示的界面
通用属性-->VC++目录-->包含目录中, 点击最右侧的按钮,选择<编辑>,如图
点击编辑,进入编辑界面,我个人感觉其实这是导入包,然后点击下图中红箭头指向的按钮,可以选择目录
注意这里直接点开右边的省略号按钮将安装目录的两个目录直接选上即可,这里我选择的目录是C:\wook_tool\opencv\opencv\build\include与C:\wook_tool\opencv\opencv\build\include\opencv2大家按照自己的安装目录来,如图
完成后点确认
接下来配置工程库lib,照葫芦画瓢,通用属性-->VC++目录-->库目录,如图
点开添加路径 我的是C:\wook_tool\opencv\opencv\build\x64\vc15\lib,大家按照自己的安装目录来,如图
点击确认,得到如图
然后是链接库,如下图顺序点击到编辑
然后手动输入opencv_world410d.lib ,如图
点击确认得到如图
点击应用--确定就完成了全部的配置
5,用gamma校正的函数进行测试,代码网上随处可找
#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include<cmath>
using namespace cv;
Mat gammaTransform(Mat& srcImage, float kFactor)
{
unsigned char LUT[256];
for (int i = 0; i < 256; i++)
{
float f = (i + 0.5f) / 255;
f = (float)(pow(f, kFactor));
LUT[i] = saturate_cast<uchar>(f * 255.0f - 0.5f);
}
Mat resultImage = srcImage.clone();
if (srcImage.channels() == 1)
{
MatIterator_<uchar> iterator = resultImage.begin<uchar>();
MatIterator_<uchar> iteratorEnd = resultImage.end<uchar>();
for (; iterator != iteratorEnd; iterator++)
{
*iterator = LUT[(*iterator)];
}
}
else
{
MatIterator_<Vec3b> iterator = resultImage.begin<Vec3b>();
MatIterator_<Vec3b> iteratorEnd = resultImage.end<Vec3b>();
for (; iterator != iteratorEnd; iterator++)
{
(*iterator)[0] = LUT[((*iterator)[0])];//b
(*iterator)[1] = LUT[((*iterator)[1])];//g
(*iterator)[2] = LUT[((*iterator)[2])];//r
}
}
return resultImage;
}
int main()
{
Mat srcImage = imread("C:\\study\\c++test\\timg.jpg");
if (!srcImage.data)
{
printf("could not load image...\n");
return -1;
}
//取两种不同的gamma值
float gamma1 = 3.33f;
float gamma2 = 0.33f;
float kFactor1 = 1 / gamma1;
float kFactor2 = 1 / gamma2;
Mat result1 = gammaTransform(srcImage, kFactor1);
Mat result2 = gammaTransform(srcImage, kFactor2);
imshow("srcImage", srcImage);
imshow("res1", result1);
imshow("res2", result2);
waitKey(0);
return 0;
}
测试结果
大功告成