c++ opencv读取,处理,并保存图片

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>
#include<opencv2/opencv.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;

int ImgArgument(Mat&img, Mat&result)

{

	//***************

	//p[]各个灰度级出现的概率

	//p1[]各个灰度级之前的概率和

	//各个灰度级出现的次数

	//*****************

	assert((img.cols == result.cols) && (img.rows == result.rows));
	double p[256], p1[256], num[256];
	int nheight = img.rows;
	int nwidth = img.cols;
	int total = nheight*nwidth;
	memset(p, 0, sizeof(p));
	memset(p1, 0, sizeof(p1));
	memset(num, 0, sizeof(num));

	//各个灰度级出现的次数
	for (int i = 0; i < nheight; i++)
	{
		uchar *data = img.ptr<uchar>(i);
		for (int j = 0; j < nwidth; j++)
		{
			num[data[j]]++;
		}
	}



	//各个灰度级出现的概率

	for (int i = 0; i < 256; i++)
	{
		p[i] = num[i] / total;
	}

	//各个灰度级之前的概率和
	for (int i = 0; i < 256; i++)
	{
		for (int j = 0; j <= i; j++)
		{
			p1[i] += p[j];
		}
	}

	//直方图变换
	for (int i = 0; i < nheight; i++)
	{
		uchar *data = img.ptr<uchar>(i);
		uchar *data0 = result.ptr<uchar>(i);
		for (int j = 0; j < nwidth; j++)
		{
			data0[j] = p1[data[j]] * 255 + 0.5;
		}
	}
	return 0;
}
#=======================================================
int _tmain(int argc, _TCHAR* argv[])
{
  char fileName[50];
  char fileName1[50];

  char windowName1[50];
  char windowName2[50];
  cv::Mat src;

  for(int i=0;i!=200;i++){
	  
	  sprintf_s(fileName, "D:\\images\\src_%d.png", i);  //读取图片的路径
	  sprintf_s(fileName1, "D:\\images_del\\src_%d.png", i); //保存图片的路径
	 
	  sprintf_s(windowName1, "NO%d", i);
	  sprintf_s(windowName2, "Dst_NO%d", i);

	  src = imread(fileName, IMREAD_REDUCED_GRAYSCALE_2); //从路径中读取图片
	  Mat dst(src.size(), src.depth());
	  
	  ImgArgument(src, dst);//图像处理过后的图片为dst
	  cv::imwrite(fileName1, dst); //保存处理后的图片
  }
    waitKey(0);   //单位毫秒,0表示永远 
    return 0;
}

可能产生的错误:

assertion failed (size.width>0 && size.height>0) in cv::imshow, 
file ……..\opencv\modules\highgui\src\window.cpp

这是由于文件路径格式不对," \ "需要转义字符:
应将Mat img = imread(“D:\images\src_%d.png”);
改为
Mat img = imread(“D:\\images\\src_%d.png”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值