OpenCV 阈值化操作cvThreshold 和 自适应阈值cvAdaptiveThreshold操作

载入一幅图片,使用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;
}













  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值