cvFilter2D( src, dst, &km, cvPoint( -1, -1 ) ); //设参考点为核的中心

109 篇文章 0 订阅
75 篇文章 5 订阅

#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);
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值