序列图片读取与sprintf函数

来源:互联网 发布:最新翻墙软件 编辑:程序博客网 时间:2024/06/05 04:40

今天帮同学处理了一批轮廓提取的图片。
收获是,学得了一种读取序列图片的方法。
记录如下。

//--------------------------------【头文件包含部分】----#include <opencv2/opencv.hpp>#include<opencv2/highgui/highgui.hpp>#include<opencv2/imgproc/imgproc.hpp>//-------------------------------【命名空间声明部分】---using namespace cv;//--------------------------------【自定义函数部分】-----Mat RiceContour(Mat src);//--------------------------------【main( )函数】--------int main(int argc, char* argv[]){    char infilename[100];    char outfilename[100];    for(int i=1;i<=10;i++)    {        sprintf(infilename,"D:\\YRJ\\%d.bmp",i);         sprintf(outfilename,"C:\\YRJ\\%d.bmp",i);        Mat src = imread(infilename);        Mat dst;        dst = RiceContour(src);  //米粒轮廓提取函数        imshow(outfilename,dst);        imwrite(outfilename,dst );    }    waitKey(0);     return 0; }Mat RiceContour(Mat src){    //【0】创建 grad_x 和 grad_y 矩阵    Mat grad_x, grad_y;    Mat abs_grad_x, abs_grad_y;    //【1】载入原始图      //Mat src;      //【2】显示原始图     //imshow("【原始图】sobel边缘检测", src);      //【3】求 X方向梯度     //Sobel( src, grad_x, CV_16S, 1, 0, 3, 1, 1, BORDER_DEFAULT );     //convertScaleAbs( grad_x, abs_grad_x );    //imshow("【效果图】 X方向Sobel", abs_grad_x);     //【4】求Y方向梯度    Sobel( src, grad_y, CV_16S, 0, 1, 9, 1, 1, BORDER_DEFAULT );    convertScaleAbs( grad_y, abs_grad_y );    //imshow("【效果图】Y方向Sobel", abs_grad_y);     //中值滤波去除噪点    Mat dst;    medianBlur( abs_grad_y, dst,3 );     //imshow("【效果图】Y方向Sobel滤波结果", dst);     //imwrite(outfilename,dst);    ////【5】合并梯度(近似)    //addWeighted( abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst );    //imshow("【效果图】整体方向Sobel", dst);     return dst; }

保存文件后的效果图

效果图

0 0
原创粉丝点击