第一次用用Opencv进行图像处理

2023.7.06更新

codeblocks安装opencv

直接放参考链接,完成安装该步骤来,简单高效!

安装教程链接
有一个问题就是第一次安装完成后运行时会报确实某些ddl的错误,关机重启就好啦!

尝试运行

ddl的错误解决后可以用以下代码进行测试,测试通过后基本就ok啦,记得改一下图片的地址。

 #include 
 #include 
 
 using namespace cv;
  
  int main()
  {
      Mat img = imread("lena.jpg",0);
     if(!img.data)
         return -1;
     imshow("ahle",img);
     waitKey(0);
     return 0;
 }
  1. 错误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 ,表示xfeatures2d.hpp在opencv2文件夹下,如果代码是#include 表示xfeatures2d.hpp是在opencv2文件夹中的xfeatures2d文件夹中,根据代码去放置相应的文件。
  2. 错误2 error: ‘CV_WINDOW_AUTOSIZE’ was not declared in this scope
    头文件里添加#include 即可。
    Opencv版本4.1.1
    error: ‘CV_RETR_TREE’ was not declared 和
    error: ‘CV_CHAIN_APPROX_SIMPLE’ was not declared解决方法同理。

Grabcut抠图实践

  1. 关于mat数据结构,参考链接
  2. namedWindow(“src”, CV_WINDOW_AUTOSIZE);
    //namedWindow()的功能就是新建一个显示窗口。可以指定窗口的类型
    //CV_WINDOW_AUTOSIZE 窗口大小自动适应图片大小,并且不可手动更改
    参考链接
  3. Opencv之鼠标响应setMouseCallback()
    参考链接
  4. Rect类
    参考链接

grabCut代码复现

参考文章

  1. 报错误:error: ‘vector’ was not declared in this scope|
    首先把vector头文件添加进去,然后在定义的vector变量前添加命名空间,即std::vector vec;

  2. Opencv之鼠标响应setMouseCallback()
    参考链接

  3. Rect类
    参考链接

2023.7.08更新
现在开始自己比对着敲grabcut的源代码啦!

一些c++语法

  1. 类中的成员函数:A fun4()const; 其意义上是不能修改所在类的的任何变量。
    在这里插入图片描述
  2. mat的创建函数
    像素是1*(modelSize*componentsCount)大小,C1表示一通道,64表示每个通道的是64位数,F表示单精度浮点数
    在这里插入图片描述
  3. 读取图像坐标
    cv::mat的成员函数: .at(int y, int x)可以用来存取图像中对应坐标为(x,y)的元素坐标。但是在使用它时要注意,在编译期必须要已知图像的数据类型,这是因为cv::mat可以存放任意数据类型的元素。
  4. Vec3b就是一个uchar类型的数组,长度为 3
  5. pano.getMatRef()
    pano的类型应该是InputOutputArray类型之类的Mat的基类(cv::InputOutputArray pano),这个函数是将pano内数据提取出来转换为mat,有点像string类的c_str()吧…
  6. opencv入门基础
    链接

你可能感兴趣的:(opencv,图像处理,人工智能)