#include <stdio.h>
 #include "opencv2/core/core.hpp"
 #include "opencv2/features2d/features2d.hpp"
 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/nonfree/nonfree.hpp"#ifdef __cplusplus
 extern "C" {
 #endif
 #include "opencv2/imgproc/imgproc_c.h"
 #ifdef __cplusplus
    }
 #endif#ifndef _DEBUG
 #pragma  comment(lib,"IlmImf.lib")   
 #pragma  comment(lib,"libjasper.lib")    
 #pragma  comment(lib,"libjpeg.lib")   
 #pragma  comment(lib,"libpng.lib")       
 #pragma  comment(lib,"libtiff.lib")  
 #pragma  comment(lib,"zlib.lib")   
 #pragma  comment(lib,"opencv_calib3d2411.lib")
 #pragma  comment(lib,"opencv_contrib2411.lib")
 #pragma  comment(lib,"opencv_core2411.lib")
 #pragma  comment(lib,"opencv_features2d2411.lib")
 #pragma  comment(lib,"opencv_flann2411.lib")
 #pragma  comment(lib,"opencv_gpu2411.lib")
 #pragma  comment(lib,"opencv_highgui2411.lib")
 #pragma  comment(lib,"opencv_imgproc2411.lib")
 #pragma  comment(lib,"opencv_legacy2411.lib")
 #pragma  comment(lib,"opencv_ml2411.lib")
 #pragma  comment(lib,"opencv_nonfree2411.lib")
 #pragma  comment(lib,"opencv_objdetect2411.lib")
 #pragma  comment(lib,"opencv_ocl2411.lib")
 #pragma  comment(lib,"opencv_photo2411.lib")
 #pragma  comment(lib,"opencv_stitching2411.lib")
 #pragma  comment(lib,"opencv_superres2411.lib")
 #pragma  comment(lib,"opencv_ts2411.lib")
 #pragma  comment(lib,"opencv_video2411.lib")
 #pragma  comment(lib,"opencv_videostab2411.lib")
 #else
 #pragma  comment(lib,"zlibd.lib")
 #pragma  comment(lib,"IlmImfd.lib")
 #pragma  comment(lib,"libjasperd.lib")
 #pragma  comment(lib,"libjpegd.lib")
 #pragma  comment(lib,"libpngd.lib")
 #pragma  comment(lib,"libtiffd.lib")
 #pragma  comment(lib,"opencv_calib3d2411d.lib")
 #pragma  comment(lib,"opencv_contrib2411d.lib")
 #pragma  comment(lib,"opencv_core2411d.lib")
 #pragma  comment(lib,"opencv_features2d2411d.lib")
 #pragma  comment(lib,"opencv_flann2411d.lib")
 #pragma  comment(lib,"opencv_gpu2411d.lib")
 #pragma  comment(lib,"opencv_highgui2411d.lib")
 #pragma  comment(lib,"opencv_imgproc2411d.lib")
 #pragma  comment(lib,"opencv_legacy2411d.lib")
 #pragma  comment(lib,"opencv_ml2411d.lib")
 #pragma  comment(lib,"opencv_nonfree2411d.lib")
 #pragma  comment(lib,"opencv_objdetect2411d.lib")
 #pragma  comment(lib,"opencv_ocl2411d.lib")
 #pragma  comment(lib,"opencv_photo2411d.lib")
 #pragma  comment(lib,"opencv_stitching2411d.lib")
 #pragma  comment(lib,"opencv_superres2411d.lib")
 #pragma  comment(lib,"opencv_ts2411d.lib")
 #pragma  comment(lib,"opencv_video2411d.lib")
 #pragma  comment(lib,"opencv_videostab2411d.lib")
 #endif using namespace cv;
void sharpen(const cv::Mat &image, cv::Mat &result) {
 result.create(image.size(), image.type()); // allocate if necessary
  int nchannels= image.channels(); for (int j= 1; j<image.rows-1; j++) { // for all rows (except first and last)
  const uchar* previous= image.ptr<const uchar>(j-1); // previous row
   const uchar* current= image.ptr<const uchar>(j); // current row
   const uchar* next= image.ptr<const uchar>(j+1);  // next row  uchar* output= result.ptr<uchar>(j); // output row
  for (int i=nchannels; i<(image.cols-1)*nchannels; i++) {
     *output++= cv::saturate_cast<uchar>(5*current[i]-current[i-nchannels]-current[i+nchannels]-previous[i]-next[i]); 
    //output[i]= cv::saturate_cast<uchar>(5*current[i]-current[i-nchannels]-current[i+nchannels]-previous[i]-next[i]); 
   }
  } // Set the unprocess pixels to 0
  result.row(0).setTo(cv::Scalar(0));
  result.row(result.rows-1).setTo(cv::Scalar(0));
  result.col(0).setTo(cv::Scalar(0));
  result.col(result.cols-1).setTo(cv::Scalar(0));
 }int main1(int argc, char** argv)
 {
     Mat img1 = imread("boldt.jpg",0);//imread("lena.jpg",1);
    
     if(img1.empty())
     {
         printf("Can't read one of the images\n");
         return -1;
     }
   Mat img2 = img1.clone();  sharpen(img1, img2);
     // drawing the results
     imshow("img1", img1);
     waitKey(0);
  imshow("img2", img2);
  waitKey(0);    return 0;
 } void sharpen2D(const cv::Mat &image, cv::Mat &result) {
 // Construct kernel (all entries initialized to 0)
  cv::Mat kernel(3,3,CV_32F,cv::Scalar(0));
  // assigns kernel values
  kernel.at<float>(1,1)= 5.0;
  kernel.at<float>(0,1)= -1.0;
  kernel.at<float>(2,1)= -1.0;
  kernel.at<float>(1,0)= -1.0;
  kernel.at<float>(1,2)= -1.0; //filter the image
  //cvFilter2D(image,result,image.depth(),kernel);
  IplImage* src, *dst; 
  float k[9] = { 0.0, -1.0, 0.0,
             -1.0, 5.0, -1.0,
              0.0, -1.0, 0.0 };//核  
  CvMat km = cvMat( 3, 3, CV_32FC1, k );  //构造单通道浮点矩阵,将图像IplImage结构转换为图像数组   IplImage srcImg(image); src=&srcImg;
  IplImage dstImg(result);dst=&dstImg;
  // CvMat km(kernel);
  cvFilter2D( src, dst, &km, cvPoint( -1, -1 ) );  //设参考点为核的中心 
 }int main(int argc, char** argv)
 {
  Mat img1 = imread("lena.jpg",1);//imread("boldt.jpg",0);// if(img1.empty())
  {
   printf("Can't read one of the images\n");
   return -1;
  }
  Mat img2 = img1.clone(); sharpen2D(img1, img2);
  // drawing the results
  imshow("img1", img1);
  waitKey(0);
  imshow("img2", img2);
  waitKey(0); return main1(argc,argv);
 }