移动平均阈值分割

#include<iostream>
#include<opencv.hpp>
using namespace cv;
using namespace std;



/*
对输入图像作移动平均分割
src为单通道灰度图像
num表示计算平均的点数
*/
void movingThreshold(Mat Img, Mat Img1, int num)
{
	IplImage* src= &IplImage(Img);
	IplImage* dst= &IplImage(Img1);
	assert(src->nChannels == 1 && dst->nChannels == 1);
	assert(src->height == dst->height && src->width == dst->width);

	uchar* dstdata = (uchar*)dst->imageData;
	uchar* data = (uchar*)src->imageData;
	int w = src->width, h = src->height;
	int step = src->widthStep;
	float n = (float)num;
	float m_pre = data[0] / n;
	float m_now = 0.0;
	cout << "data[0]" << data[0] << "m_pre:" << m_pre << endl;
	float b = 0.755;
	cout << w << "   " << step << endl;
	for (int i = 0; i<h; i++)
	{
		for (int j = 0; j<w; j++)
		{
			int index = i * step + j;

			float dif;
			if (index<num + 1)
				dif = data[index];
			else
				dif = data[index] - data[index - num - 1];

			dif *= 1 / n;
			m_now = m_pre + dif;
			m_pre = m_now;
			//cout << m_now << endl;
			if (data[index]>cvRound(b*m_now))
				dstdata[index] = 255;
			else
				dstdata[index] = 0;
		}
	}
	//提升滤波
	Mat temp = cvarrToMat(dst);
	/*Mat dst1;*/
	//Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));
	//morphologyEx(~temp, dst1, MORPH_CLOSE, element);
	//Mat gaussi;
	//GaussianBlur(~temp, gaussi, Size(11,11), 3, 3);
	//Mat mask;
	//cv::subtract(~temp, gaussi, mask);
	//Mat imageEnhance;
	//cv::add(~temp,5 * mask, imageEnhance);
	//blur(imageEnhance, imageEnhance, Size(3, 3));
	imwrite("11.jpg", temp);
	//cvReleaseImage(&src);
	//cvDestroyWindow("src");
	//cvReleaseImage(&dst);

}
int main()
{
	cout << "hello world" << endl;
	Mat srcImage = imread("D:/Image/PDF0619/C_1.jpg",0);
	//threshold(srcImage,srcImage,230,255,THRESH_TRUNC);
	Mat dstImage(srcImage.rows,srcImage.cols, CV_8UC1);
	movingThreshold(srcImage, dstImage,13);

	waitKey(0);   
	return 0;
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值