c++ opencv 常用指令

本文介绍了C++中使用OpenCV进行图像处理的基本操作,包括指针的使用、图片显示与保存、Mat矩阵操作、Vector应用以及GUI交互和文件读取方法。重点讲解了如何定义和释放指针,显示、保存图片,初始化Mat,以及如何在OpenCV图像中提取角点。
摘要由CSDN通过智能技术生成

1.       指针

1)     定义指针最后要删除

float *p = new float[9];

delete []p;

 

 

2.      图片

1)     显示、销毁窗口和保存

itoa(i+1,mid,10);

namedWindow(mid,0);  //0为适应窗口大小

imshow(mid,views[i]);

waitKey();           // waitKey()等待用户输入,可显示出图片

destroyWindow(mid);  //销毁窗口

road =prefix+mid+end;

imwrite(road,views[i]);

 

 

3.     Mat:

1)       Mat初始化:

Mat cammat =Mat::eye(3, 3, CV_32F);

Mat discoeff =Mat::zeros(8, 1, CV_32F);

 

2)      图像元素的访问


三通道:

Vec3i bgr =mat_CV_8UC3.at<Vec3b>(nrow,ncol);

bgr.val[0];bgr.val[1]; bgr.val[2];    分别代表蓝绿红

 

单通道:

uchar val =mat_CV_8UC1.at<uchar>(nrow,ncol);        

int(val);                                 灰度值

 

4.     Vector

头文件 #include<vector>

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
归一化互相关(Normalized Cross-Correlation,NCC)是一种常用图像匹配方法,可以用于模板匹配、目标跟踪等领域。SSE(Streaming SIMD Extensions)是Intel公司开发的一种SIMD指令集,可以在处理器中同时处理多个数据。下面是使用SSE优化的归一化互相关的实现代码: ```c++ #include <emmintrin.h> // 包含SSE指令集头文件 #include <opencv2/opencv.hpp> using namespace cv; void NCC_SSE(const Mat& img, const Mat& templ, Mat& result) { int img_h = img.rows, img_w = img.cols; int templ_h = templ.rows, templ_w = templ.cols; int result_h = img_h - templ_h + 1, result_w = img_w - templ_w + 1; result.create(result_h, result_w, CV_32FC1); __m128i zero = _mm_setzero_si128(); // 初始化一个全0的向量 for (int i = 0; i < result_h; i++) { for (int j = 0; j < result_w; j += 4) { __m128 sum = _mm_setzero_ps(); // 初始化一个全0的向量 // 计算模板和图像的均值 float templ_mean = mean(templ)[0]; Mat img_roi(img, Rect(j, i, templ_w, templ_h)); float img_mean = mean(img_roi)[0]; // 计算模板和图像的标准差 Mat templ_square, img_square; multiply(templ, templ, templ_square); multiply(img_roi, img_roi, img_square); float templ_stddev = sqrt(mean(templ_square)[0] - templ_mean * templ_mean); float img_stddev = sqrt(mean(img_square)[0] - img_mean * img_mean); // 计算NCC for (int k = 0; k < templ_h; k++) { const float* img_ptr = img.ptr<float>(i + k) + j; const float* templ_ptr = templ.ptr<float>(k); for (int l = 0; l < templ_w; l += 4) { __m128 a = _mm_loadu_ps(img_ptr + l); __m128 b = _mm_loadu_ps(templ_ptr + l); __m128 c = _mm_sub_ps(a, _mm_set1_ps(img_mean)); __m128 d = _mm_sub_ps(b, _mm_set1_ps(templ_mean)); __m128 e = _mm_mul_ps(c, d); sum = _mm_add_ps(sum, e); } } // 归一化 float scale = img_stddev / templ_stddev; __m128 s = _mm_set1_ps(scale); __m128 r = _mm_div_ps(sum, _mm_mul_ps(_mm_set1_ps(templ_w * templ_h), _mm_mul_ps(_mm_set1_ps(img_stddev), s))); r = _mm_max_ps(r, zero); result.at<float>(i, j) = r[0]; result.at<float>(i, j + 1) = r[1]; result.at<float>(i, j + 2) = r[2]; result.at<float>(i, j + 3) = r[3]; } } } ``` 其中,`__m128`是SSE指令集中的128位向量类型,可以同时存储4个float类型的数据,`_mm_loadu_ps`、`_mm_set1_ps`、`_mm_add_ps`、`_mm_sub_ps`、`_mm_mul_ps`、`_mm_div_ps`等函数是SSE指令集中的函数,用于对向量进行加载、赋值、加减乘除等操作。在计算NCC时,利用SSE指令集的优势,可以同时计算4个像素的结果,从而提高了计算效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值