-
直接调用Opencv的函数实现
//////////////////////////////////
//opencv4.1.0
//////////////////////////////////
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main() {
Mat src, srcMean, SubImage, dstImage;
src = imread("1.png",0);
blur(src, srcMean, Size(9, 9));
subtract(src, srcMean, SubImage);
//addWeighted(src,-1,srcMean,1,0,SubImage); //可以利用图像权重相加的函数实现图像相减
threshold(SubImage, dstImage, 5, 255, THRESH_BINARY);
imshow("动态阈值", dstImage);
waitKey(0);
return 0;
}
-
dyn_threshold算子使用C++实现
效果图:

原图

Light模式结果图
代码:
//////////////////////////////////
//opencv4.1.0
//////////////////////////////////
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
//实现Halcon里的动态阈值
void DynThreshold(Mat& src,Mat& srcMean,Mat& reslut, int offset,int LightDark);
//枚举定义动态阈值的模式
enum Dyn
{
Light = 1,
Dark,
Equal,
Not_equal
};
int main() {
Mat src, srcMean;
src = imread("1.png",0);
//均值滤波
blur(src, srcMean, Size(9, 9));
//动态阈值
Mat result = Mat::zeros(src.size(), CV_8UC1);
DynThreshold(src, srcMean, result, 5, Light);
imshow("原图", src);
imshow("均值滤波", srcMean);
imshow("动态阈值", result);
waitKey(0);
return 0;
}
void DynThreshold(Mat& src, Mat& srcMean, Mat& result, int offset, int LightDark) {
int r = src.rows;//高
int c = src.cols;//宽
int Value = 0;
for (int i = 0; i < r; i++){
uchar* datasrc = src.ptr<uchar>(i); //指针访问图像像素
uchar* datasrcMean = srcMean.ptr<uchar>(i);
uchar* dataresult = result.ptr<uchar>(i);
for (int j = 0; j < c; j++){
switch (LightDark)
{
case 1:
Value = datasrc[j] - datasrcMean[j];
if (Value >= offset) {
dataresult[j] = 255;
}
break;
case 2:
Value = datasrcMean[j] - datasrc[j];
if (Value >= offset) {
dataresult[j] = 255;
}
break;
case 3:
Value = datasrc[j] - datasrcMean[j];
if (Value >= -offset && Value <= offset) {
dataresult[j] = 255;
}
break;
case 4:
Value = datasrc[j] - datasrcMean[j];
if (Value < -offset || Value > offset) {
dataresult[j] = 255;
}
break;
default:
break;
}
}
}
}
本文介绍如何使用C++和OpenCV库实现动态阈值的图像处理技术,通过对比原图和处理后的图像,展示动态阈值的效果。文章详细讲解了动态阈值的实现过程,包括图像读取、均值滤波、动态阈值计算和结果显示。
3824

被折叠的 条评论
为什么被折叠?



