opencv copyto函数

来源:互联网 发布:淘宝网艾瑞可女式皮衣 编辑:程序博客网 时间:2024/06/05 16:40

copyTo最一般的用法是src.copyTo(dst),将src复制到dst矩阵中。

后面一个参数可以表示复制的部分,如上面的代码src.copyTo( dst, detected_edges); 

是将src中detected_edges矩阵对应的非零部分(即边缘检测结果)复制到dst中。

所以最终显示的边缘和原图颜色一样,也可以直接显示detected_edges矩阵(黑白)。


代码:

#include "opencv2/imgproc/imgproc.hpp"#include "opencv2/highgui/highgui.hpp"#include <stdlib.h>#include <stdio.h>using namespace cv;/// 全局变量Mat src, src_gray;Mat dst, detected_edges;int edgeThresh = 1;int lowThreshold;int const max_lowThreshold = 100;int ratio = 3;int kernel_size = 3;char* window_name = "Edge Map";/** * @函数 CannyThreshold * @简介: trackbar 交互回调 - Canny阈值输入比例1:3 */void CannyThreshold(int, void*){  /// 使用 3x3内核降噪  blur( src_gray, detected_edges, Size(3,3) );  /// 运行Canny算子  Canny( detected_edges, detected_edges, lowThreshold, lowThreshold*ratio, kernel_size );  /// 使用 Canny算子输出边缘作为掩码显示原图像  dst = Scalar::all(0);  src.copyTo( dst, detected_edges);  imshow( window_name, dst ); }/** @函数 main */int main( int argc, char** argv ){  /// 装载图像  src = imread( argv[1] );  if( !src.data )  { return -1; }  /// 创建与src同类型和大小的矩阵(dst)  dst.create( src.size(), src.type() );  /// 原图像转换为灰度图像  cvtColor( src, src_gray, CV_BGR2GRAY );  /// 创建显示窗口  namedWindow( window_name, CV_WINDOW_AUTOSIZE );  /// 创建trackbar  createTrackbar( "Min Threshold:", window_name, &lowThreshold, max_lowThreshold, CannyThreshold );  /// 显示图像  CannyThreshold(0, 0);  /// 等待用户反应  waitKey(0);  return 0;  }



0 0
原创粉丝点击