您的位置:首页 > 运维架构

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;
}













内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: