• 这段时间编程遇到的小坑


    • 迭代器的使用
      遍历一个vector<自定义的结构体> v,结构体里面部分是计算的输入,部分是输出。于是我图简单直接写了:

      for(auto iter : v)
          v.a = Algorthim(v.b);

      后来就直接用v进行后来的计算了,发现出错。原来auto iter是不会改变v数组本身的值的!
      因为这种写法展开就是:

      for(auto iter : v)
      {
      
      }
      等同于:
      
      for(auto piter = v.begin(); piter != v.end(); piter++)
      {
             auto iter = *piter;   
             iter.a = XXX;    //不会修改值
             *piter->a = XXX;    //会修改值
      }

      等同于是一个形参,没有修改数组本身的值。

    • opencv的大坑!
      1 cv::Mat img;
      2 img.resize(80,80); //这个函数竟然不是resize图像大小,而是类似vector的resize的存在,只改变的img的行数
      3 
      4 resize(img, img, cv::size(80,80)); //这个才能改变图像的大小
    • opencv一个坑接一个坑

      ①浅拷贝的情况:

      //赋值方式为浅拷贝
      cv::Mat img1, img2;
      img1=imread("test.jpg");  //将任意一张名为test.jpg的图片放置于工程文件夹test中
      img2 = img1; //浅拷贝,修改img2的时候,同时修改img1
      
      //传参时1:
      void Func1(cv::Mat img1)
      {
         cv::Mat img2 = img2;  //浅拷贝
      }
      
      //传参时2:
      void Func1(unsigned char* data, int width, int height)
      {
         cv::Mat img2(height, width, CV_8UC3, data); //浅拷贝
      }

      ②深拷贝的情况:

      img2.copyTo(img1) 
      img1=img2.clone()
    • opencv另外一个坑:

      Mat中的图像数据是不对齐的,而IplImage中的图像数据是4字节对齐的,所以在访问IplImage图像数据的时候,要特别注意widthStep这个属性,每行的字节数不是width*nchannels而是widthStep,因为每行可能会有字节填充的。

      因此,读像素值的时候,注意,不要读错了。

  • 相关阅读:
    python+django+vue搭建前后端分离项目
    PC网页js调用本地应用程序
    mysql-connetor-c 自动创建数据库、数据库表的命令
    JMeter设置响应数据的编码格式
    VS2013常用快捷键
    WPF 实现 TextBox 只能输入数字并且不能使用拷贝功能
    WPF 先显示登录成功,验证成功后显示主窗口
    ListControl 设置表格行高与字体
    win7 删除多余启动项的方法
    设置编辑工具UltraEdit的背景色为护眼颜色
  • 原文地址:https://www.cnblogs.com/liumeng-blog/p/8081336.html
Copyright © 2020-2023  润新知