2023.7.06更新
codeblocks安装opencv
直接放参考链接,完成安装该步骤来,简单高效!
安装教程链接
有一个问题就是第一次安装完成后运行时会报确实某些ddl的错误,关机重启就好啦!
尝试运行
ddl的错误解决后可以用以下代码进行测试,测试通过后基本就ok啦,记得改一下图片的地址。
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("lena.jpg",0);
if(!img.data)
return -1;
imshow("ahle",img);
waitKey(0);
return 0;
}
- 错误2 找不到某个hpp文件,xfeatures2d.hpp
这是因为opencv中缺少这些文件,我们先自己手动下载下来,下载下来的是opencv_contrib文件,里面包含了很多hpp文件,下次缺少的时候直接去找就行,很方便。下载地址如下:
下载链接1
下载的时候一定要找到对应的版本,和自己的opencv要一致,我的是opencv4.1.1,我单独在网上搜的下载地址,下载地址如下
下载地址2
再来一个,这个是其它的
下载地址3
假设缺少的是xfeatures2d.hpp文件,先去D:\opencv_contrib-4.1.1\opencv_contrib-4.1.1\modules\xfeatures2d\include\opencv2路径里找到features2d文件,把这个文件复制到D:\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\OpenCV-MinGW-Build-OpenCV-4.1.1-x64\include\opencv2中,注意一点,如果代码是#include <opencv2/xfeatures2d.hpp>,表示xfeatures2d.hpp在opencv2文件夹下,如果代码是#include <opencv2/xfeatures2d/xfeatures2d.hpp>表示xfeatures2d.hpp是在opencv2文件夹中的xfeatures2d文件夹中,根据代码去放置相应的文件。 - 错误2 error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
头文件里添加#include <opencv2/highgui/highgui_c.h>即可。
Opencv版本4.1.1
error: ‘CV_RETR_TREE’ was not declared 和
error: ‘CV_CHAIN_APPROX_SIMPLE’ was not declared解决方法同理。
Grabcut抠图实践
- 关于mat数据结构,参考链接
- namedWindow(“src”, CV_WINDOW_AUTOSIZE);
//namedWindow()的功能就是新建一个显示窗口。可以指定窗口的类型
//CV_WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改
参考链接 - Opencv之鼠标响应setMouseCallback()
参考链接 - Rect类
参考链接
grabCut代码复现
参考文章
-
报错误:error: ‘vector’ was not declared in this scope|
首先把vector头文件添加进去,然后在定义的vector变量前添加命名空间,即std::vector vec; -
Opencv之鼠标响应setMouseCallback()
参考链接 -
Rect类
参考链接
2023.7.08更新
现在开始自己比对着敲grabcut的源代码啦!
一些c++语法
- 类中的成员函数:A fun4()const; 其意义上是不能修改所在类的的任何变量。
- mat的创建函数
像素是1*(modelSize*componentsCount)大小,C1表示一通道,64表示每个通道的是64位数,F表示单精度浮点数
- 读取图像坐标
cv::mat的成员函数: .at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。 - Vec3b就是一个uchar类型的数组,长度为 3
- pano.getMatRef()
pano的类型应该是InputOutputArray类型之类的Mat的基类(cv::InputOutputArray pano),这个函数是将pano内数据提取出来转换为mat,有点像string类的c_str()吧… - opencv入门基础
链接