opencv基本图像处理
来源:互联网 发布:网络十大禁书txt 编辑:程序博客网 时间:2024/05/22 13:43
1.反转图像函数:cv::flip()void flip(InputArray src, OutputArray dst, int flipCode); 参数fipCode: 整数,水平发转;0垂直反转;负数,水平垂直均反转。2.sobel边缘检测函数:cv::sobel()例程://从文件中读入图像 const char* imagename = "lena.BMP"; Mat img = imread(imagename); if(img.empty()) //如果读入图像失败 { fprintf(stderr, "Can not load image %s\n", imagename); return -1; } namedWindow("original image"); imshow("original image",img); //Mat result; //flip(img, result, -1); //反转图像 Mat sobelX, sobelY, sobel; Sobel(img, sobelX, CV_16S, 1, 0); Sobel(img, sobelY, CV_16S, 0, 1); sobel = abs(sobelX) + abs(sobelY); //搜索sobel极大值 double sobmin, sobmax; minMaxLoc(sobel, &sobmin, &sobmax); //变换为8位图像 //sobelImage = -alpha*sobel + 255 Mat sobelImage; sobel.convertTo(sobelImage, CV_8U, -255./sobmax, 255); namedWindow("sobelImage"); imshow("sobelImage", sobelImage); Mat sobelThresholded; double threadVal = 200; threshold(sobelImage, sobelThresholded, threadVal, 255, THRESH_BINARY); namedWindow("sobelThresholded"); imshow("sobelThresholded", sobelThresholded); 3. 读取单通道灰度图像Mat img = imread("lena.bmp", 0); imshow("lena", img); 建立的img是单通道的。4. 中值滤波CvImgProc cvImgProc; Mat img = imread("lena.bmp", 0); //读取图像 namedWindow("lena", CV_WINDOW_AUTOSIZE); imshow("lena", img); Mat saltImg = img.clone(); //复制图像 cvImgProc.salt(saltImg, 1000); //添加椒盐噪声 namedWindow("saltlena", CV_WINDOW_AUTOSIZE); imshow("saltlena", saltImg); Mat blurImg; medianBlur(saltImg, blurImg, 3); //5*5中值滤波 namedWindow("blurImg", CV_WINDOW_AUTOSIZE); imshow("blurImg", blurImg); 5. canny边缘检测Mat img = imread("lena.bmp", 0); //读取图像 namedWindow("lena", CV_WINDOW_AUTOSIZE); imshow("lena", img); Mat contours; Canny(img, contours, 125, 350); //canny边缘检测 namedWindow("contours", CV_WINDOW_AUTOSIZE); imshow("contours", contours); Mat contoursInv; threshold(contours, contoursInv, 128, 255, THRESH_BINARY_INV); //反转边缘图像 namedWindow("contoursInv", CV_WINDOW_AUTOSIZE); imshow("contoursInv", contoursInv); 6. 腐蚀操作原理:腐蚀替换当前像素位像素集合中找到的最小像素值。//读取输入图像 Mat image = imread("binary.bmp"); namedWindow("binary"); imshow("binary", image); //腐蚀图像 Mat eroded; //目标图像 //使用默认的方形结构元素(等价于以下注释掉的代码) erode(image, eroded, Mat()); //Mat element(3, 3, CV_8U, Scalar(1)); //erode(image, eroded, element); //显示腐蚀后的图像 namedWindow("Eroded Image"); imshow("Eroded Image", eroded); 7. 膨胀操作原理:膨胀是替换当前像素位像素集合中找到的最大像素值。//读取输入图像 Mat image = imread("binary.bmp"); namedWindow("binary"); imshow("binary", image); //膨胀图像 Mat dilated; //目标图像 //使用默认的方形结构元素(等价于以下注释掉的代码) dilate(image, dilated, Mat()); //Mat element(3, 3, CV_8U, Scalar(1)); //dilate(image, dilated, element); //显示膨胀后的图像 namedWindow("Dilated Image"); imshow("Dilated Image", dilated); 还可以进行多次膨胀,只需将执行函数该为:dilate(image, dilated, Mat(), Point(-1, -1), 3); 8. 图像二值化CvImgProc cvImgProc; //读取输入图像 //Mat image = imread("lena.bmp"); IplImage* iplImage = cvLoadImage("lena.bmp"); IplImage* iplImage2 = cvCreateImage(cvSize(512, 512), IPL_DEPTH_8U, 1); double thresholdVal = cvImgProc.cvThresholdOtsu(iplImage); printf("thresholdVal = %lf", thresholdVal); Mat image(iplImage, false); Mat image3; threshold(image, image3, thresholdVal, 255, THRESH_BINARY); namedWindow("binary"); imshow("binary", image3); 得出阈值是127version 2:CvImgProc cvImgProc; //读取输入图像 Mat image = imread("camera.tiff"); Mat image2; int thresholdVal = cvImgProc.cvOtsu(image); printf("thresholdVal = %d", thresholdVal); threshold(image, image2, thresholdVal, 255, THRESH_BINARY); namedWindow("binary"); imshow("binary", image2); imwrite("cameraBinary.bmp", image2); 9.闭运算//读取输入图像 Mat image = imread("lenaBinary.bmp"); Mat element5(3, 3, CV_8U, Scalar(1)); Mat closed; morphologyEx(image, closed, MORPH_CLOSE, element5); namedWindow("closed"); imshow("closed", closed); 10.开运算//读取输入图像 Mat image = imread("lenaBinary.bmp"); Mat element3(3, 3, CV_8U, Scalar(1)); Mat opened; morphologyEx(image, opened, MORPH_CLOSE, element3); namedWindow("closed"); imshow("closed", opened); 11.三通道彩色图像转单通道灰度图像//读取输入图像 Mat image = imread("pepper.bmp"); namedWindow("image"); imshow("image", image); Mat image2; cvtColor(image, image2, CV_BGR2GRAY, 1); //尾参:无/0保留通道个数;1单通道;3三通道。 namedWindow("image2"); imshow("image2", image2); imwrite("pepperGray.bmp", image2); 12.求图像的最大值和最小值//读取输入图像 Mat image = imread("lena.bmp"); namedWindow("image"); imshow("image", image); double minVal, maxVal; minMaxLoc(image, &minVal, &maxVal); printf("minVal = %lf\n", minVal); printf("maxVal = %lf\n", maxVal); 13.角点提取//读取输入图像 Mat image = imread("calibrateGray.bmp"); namedWindow("image"); imshow("image", image); //检测角点 Mat cornerStrength; cornerHarris(image, cornerStrength, 3, //相邻像素的尺寸 3, //滤波器的孔径大小 0.01); //Harris参数 //角点强度的阈值 Mat harrisCorners; double thresholdVal = 0.0001; threshold(cornerStrength, harrisCorners, thresholdVal, 255, THRESH_BINARY_INV); namedWindow("harrisCorners"); imshow("harrisCorners", harrisCorners); imwrite("calibrateHarris.bmp", harrisCorners); 14.判断图像是否读入成功//读取输入图像 Mat image = imread("calibrateGray.bmp"); if (!image.data) { printf("读取图像失败\n"); } 15. 将unsigned char*(或BYTE*)封装成Mat类型version 1int width = 0; int height = 0; int lineByte = 0; BYTE* imData = rdWtIm.Read8bitbmp("cam1FstImArSptImage.bmp", &width, &height, &lineByte); printf("width = %d\n", width); printf("height = %d\n", height); printf("lineByte = %d\n", lineByte); Mat iMat(height, width, CV_8UC1, imData, lineByte); namedWindow("lena"); imshow("lena", iMat); version 2RdWtIm rdWtIm; int width = 0; int height = 0; int lineByte = 0; BYTE* imData = rdWtIm.Read8bitbmp("lena.bmp", &width, &height, &lineByte); //cam1FstImArSptImage printf("width = %d\n", width); printf("height = %d\n", height); printf("lineByte = %d\n", lineByte); //Scalar scal = 0; Mat iMat(height, width, CV_8UC1, Scalar(0)); iMat.step = lineByte; iMat.data = imData; namedWindow("lena"); imshow("lena", iMat); 16.如何使图像显示窗口能够调节大小void namedWindow(const string& winname, int flags=WINDOW_AUTOSIZE ) 将参数:flags设置成WINDOW_NORMAL即可。举例:namedWindow("original image", WINDOW_NORMAL); imshow("original image", image); 17.如何反转图像灰度,即求图像的负片将图像中每点的灰度变成(255-gray),其中gray是当前点的灰度。void bitwise_not(InputArray src, OutputArray dst, InputArray mask=noArray()) 18.利用hough变换检测圆////hough变换检测圆 vector<Vec3f> circles; HoughCircles(inverse, circles, CV_HOUGH_GRADIENT, 1, //累加器的分辨率(图像的尺寸/2) 6, //两个圆之间的最小距离 100, //Canny高阈值 5, //最小投票数 3, 7); //极小极大半径3 10 可以将检测出的圆绘制在图中//绘制圆 vector<Vec3f>::const_iterator itc = circles.begin(); while(itc != circles.end()) { circle(inverse, Point((*itc)[0], (*itc)[1]), //圆心 (*itc)[2], //半径 Scalar(255), //颜色 2); //厚度 ++itc; }
cv::f
0 0
- opencv基本图像处理
- opencv图像处理基本操作
- OPencv图像处理基本操作
- opencv图像处理基本操作
- opencv-图像处理1 图像基本操作
- OpenCV学习笔记:基本的图像处理
- 基本的opencv图像处理函数
- 图像处理matlab+OpenCV基本操作
- opencv基本的几个图像处理函数
- Python-OpenCV 处理图像基本操作
- OpenCV 教程(1) -- 基本图像处理
- OpenCv-Python 图像处理基本操作
- [OpenCv]opencv中图像处理的一些基本操作
- OpenCv入门(二)-图像处理基本函数
- opencv基本图像处理——添加滑动条trackbar
- Qt:&OpenCV—Q图像处理基本操作(Code)
- OpenCv入门(二)-图像处理基本函数
- Python-OpenCV 处理图像(一):基本操作
- Oracle触发器(建立系统事件触发器)
- JavaScript学习第六课--数据类型
- 【LeetCode】Algorithms 题集(八)
- 第十五周项目2(1):阅读程序
- jvm开发笔记5 - 虚拟机内存管理
- opencv基本图像处理
- 修改linux主机名
- Secondary NameNode:它究竟有什么作用?
- 【深度学习笔记】深度学习用于图片的分类和检测总结
- sql 2008 修改链接服务器 Rpc &Rpc Out
- MATLAB实现批量处理图像图片的两种方法
- GitHub超详细图文攻略 - Git客户端下载安装 GitHub提交修改源码工作流程 Git分支 标签 过滤 Git版本工作流
- P2P-JXTA学习(1)-入门
- android调用系统裁剪自由比例,设置输出尺寸无效的问题