OpenCV 阈值化操作cvThreshold 和 自适应阈值cvAdaptiveThreshold操作
2017-11-23 15:31
731 查看
载入一幅图片,使用cvThreshold函数对其进行操作,设置阈值为128。
使用自适应阈值进行同样操作
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
/*1.载入图像*/
const char filename[] = "/Users/linwang/Downloads/30.png";
IplImage * Img = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
/*2. 将这幅图像缩小三次,并显示结果*/
double fscale = 0.5;
CvSize czSize;
IplImage * dst = 0;
czSize.width = Img->width * fscale;
czSize.height = Img->height * fscale - 13;
dst = cvCreateImage(czSize, Img->depth, Img->nChannels);
cvResize(Img, dst);
cvShowImage("Resize", dst);
/*3.利用cvThreshold()函数对其进行操作*/
/*3.1 CV_THRESH_BINARY dsti = srci > T ? M : 0 */
IplImage * BINARY = cvCloneImage(dst);
cvSetZero(BINARY);
cvThreshold(dst, BINARY, 128, 255, CV_THRESH_BINARY);
cvShowImage("BINARY", BINARY);
/*3.2 CV_THRESH_BINARY_INV dsti = srci > T ? 0 : M */
IplImage * BINARY_INV = cvCloneImage(dst);
cvSetZero(BINARY_INV);
cvThreshold(dst, BINARY_INV, 128, 255, CV_THRESH_BINARY_INV);
cvShowImage("BINARY_INV", BINARY_INV);
/*3.3 CV_THRESH_TRUNC dsti = srci > T ? M : srci */
IplImage * TRUNC = cvCloneImage(dst);
cvSetZero(TRUNC);
cvThreshold(dst, TRUNC, 128, 255, CV_THRESH_TRUNC);
cvShowImage("TRUNC", TRUNC);
/*3.4 CV_THRESH_TOZERO_INV dsti = srci > T ? 0 : srci */
IplImage * TOZERO_INV = cvCloneImage(dst);
cvSetZero(TOZERO_INV);
cvThreshold(dst, TOZERO_INV, 128, 255, CV_THRESH_TOZERO_INV);
cvShowImage("TOZERO_INV", TOZERO_INV);
/*3.5 CV_THRESH_TOZERO dsti = srci > T ? srci : 0 */
IplImage * TOZERO = cvCloneImage(dst);
cvSetZero(TOZERO);
cvThreshold(dst, TOZERO, 128, 255, CV_THRESH_TOZERO);
cvShowImage("TOZERO", TOZERO);
/*4. 使用自适应阈值技术来实现此5个操作,自适应阈值操作是用3 * 3 区域加权平均,再减去5得到*/
/*4.1 CV_THRESH_BINARY*/
IplImage * SH_BINARY = cvCloneImage(dst);
cvSetZero(SH_BINARY);
cvAdaptiveThreshold(dst, SH_BINARY, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,5);
cvShowImage("ADA_BINARY", SH_BINARY);
IplImage * SH_BINARY_INV = cvCloneImage(dst);
cvSetZero(SH_BINARY_INV);
cvAdaptiveThreshold(dst, SH_BINARY_INV, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY_INV,3,5);
cvShowImage("ADA_BINARY_INV", SH_BINARY_INV);
cvWaitKey(0);
return 1;
}
使用自适应阈值进行同样操作
#include <iostream>
#include <opencv2/opencv.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/core/core.hpp>
using namespace std;
using namespace cv;
int main(int argc, const char * argv[]) {
/*1.载入图像*/
const char filename[] = "/Users/linwang/Downloads/30.png";
IplImage * Img = cvLoadImage(filename,CV_LOAD_IMAGE_GRAYSCALE);
/*2. 将这幅图像缩小三次,并显示结果*/
double fscale = 0.5;
CvSize czSize;
IplImage * dst = 0;
czSize.width = Img->width * fscale;
czSize.height = Img->height * fscale - 13;
dst = cvCreateImage(czSize, Img->depth, Img->nChannels);
cvResize(Img, dst);
cvShowImage("Resize", dst);
/*3.利用cvThreshold()函数对其进行操作*/
/*3.1 CV_THRESH_BINARY dsti = srci > T ? M : 0 */
IplImage * BINARY = cvCloneImage(dst);
cvSetZero(BINARY);
cvThreshold(dst, BINARY, 128, 255, CV_THRESH_BINARY);
cvShowImage("BINARY", BINARY);
/*3.2 CV_THRESH_BINARY_INV dsti = srci > T ? 0 : M */
IplImage * BINARY_INV = cvCloneImage(dst);
cvSetZero(BINARY_INV);
cvThreshold(dst, BINARY_INV, 128, 255, CV_THRESH_BINARY_INV);
cvShowImage("BINARY_INV", BINARY_INV);
/*3.3 CV_THRESH_TRUNC dsti = srci > T ? M : srci */
IplImage * TRUNC = cvCloneImage(dst);
cvSetZero(TRUNC);
cvThreshold(dst, TRUNC, 128, 255, CV_THRESH_TRUNC);
cvShowImage("TRUNC", TRUNC);
/*3.4 CV_THRESH_TOZERO_INV dsti = srci > T ? 0 : srci */
IplImage * TOZERO_INV = cvCloneImage(dst);
cvSetZero(TOZERO_INV);
cvThreshold(dst, TOZERO_INV, 128, 255, CV_THRESH_TOZERO_INV);
cvShowImage("TOZERO_INV", TOZERO_INV);
/*3.5 CV_THRESH_TOZERO dsti = srci > T ? srci : 0 */
IplImage * TOZERO = cvCloneImage(dst);
cvSetZero(TOZERO);
cvThreshold(dst, TOZERO, 128, 255, CV_THRESH_TOZERO);
cvShowImage("TOZERO", TOZERO);
/*4. 使用自适应阈值技术来实现此5个操作,自适应阈值操作是用3 * 3 区域加权平均,再减去5得到*/
/*4.1 CV_THRESH_BINARY*/
IplImage * SH_BINARY = cvCloneImage(dst);
cvSetZero(SH_BINARY);
cvAdaptiveThreshold(dst, SH_BINARY, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY,3,5);
cvShowImage("ADA_BINARY", SH_BINARY);
IplImage * SH_BINARY_INV = cvCloneImage(dst);
cvSetZero(SH_BINARY_INV);
cvAdaptiveThreshold(dst, SH_BINARY_INV, 255,CV_ADAPTIVE_THRESH_MEAN_C,CV_THRESH_BINARY_INV,3,5);
cvShowImage("ADA_BINARY_INV", SH_BINARY_INV);
cvWaitKey(0);
return 1;
}
相关文章推荐
- opencv2函数学习之threshold:实现图像阈值化 在opencv2中,threshold函数可以进行阈值化操作。 double threshold( const Mat& src, M
- 【OpenCV3】阈值化操作——cv::threshold()与cv::adaptiveThreshold()详解
- 【练习5.12】阈值化cvThreshold、自适应阈值cvAdaptiveThreshold、各参数效果对比
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- opencv二值化函数cvAdaptiveThreshold和cvThreshold
- OpenCV学习笔记-自适应阈值化
- (学习笔记)threshold —— opencv阈值操作
- 利用OpenCV的threshold函数实现双阈值法二值化操作的源码!
- OpenCV二值化cvThreshold和自适应二值化cvAdaptiveThreshold及Otsu
- Learning OpenCV cvAdaptiveThreshold 自适应阈值
- OpenCV3_C++_Threshold()阈值化处理 实例
- opencv自适应阀值cvAdaptiveThreshold的应用
- opencv3_java 图像直接阈值化操作 AdaptiveThreshold
- opencv学习(二十八)之基本图像阈值操作threshold
- Opencv图像识别从零到精通(15)-----阈值分割、固定阈值Threshold、自适应阈值分割adaptiveThreshold、OSTU大津法
- Opencv固定阀值操作-Threshold函数
- 【OpenCV3图像处理】阈值化操作得到二值图像(附Otsu算法和三角法原理与源码)
- Opencv自适应阀值操作-adaptiveThreshold函数
- openCV第五章/图像处理 -- 阈值化(自适应)
- openCV第五章/图像处理 -- 阈值化(自适应)