opencv学习笔记(05)——操作相邻区域

下面的例子以灰度图像为例:


#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>
#include <opencv2\core\core.hpp>

using namespace cv;

void sharpen(const cv::Mat& img_original, cv::Mat& img_altered);

void sharpen2D(const cv::Mat& img_original, cv::Mat& img_altered);

int main()
{

cv::Mat img_original = cv::imread("F:\\images\\boldt.jpg", cv::IMREAD_GRAYSCALE );
cv::Mat img_altered = img_original.clone();

// 锐化
sharpen2D(img_original, img_altered);

cv::namedWindow("orignal");
cv::imshow("orignal", img_original);
cv::namedWindow("altered");
cv::imshow("altered", img_altered);

cv::waitKey();

return 0;
}

void sharpen(const cv::Mat& img_original, cv::Mat& img_altered)
{

int nc = img_original.cols;
int nl = img_original.rows;

for(int j=1; j<nl-1; j++)
{
const uchar* previous = img_original.ptr<const uchar>(j-1);
const uchar* current = img_original.ptr<const uchar>(j);
const uchar* next = img_original.ptr<const uchar>(j+1);

uchar* output = img_altered.ptr<uchar>(j);

for(int i=1; i<nc-1; i++)
{
*output++ = saturate_cast<uchar>( 5 * current[i] - previous[i] - next[i] - current[i-1] - current[i+1] );
}
}

img_altered.row(0).setTo(cv::Scalar(0));
img_altered.row(nl-1).setTo(cv::Scalar(0));
img_altered.col(0).setTo(cv::Scalar(0));
img_altered.col(nc-1).setTo(cv::Scalar(0));

}

void sharpen2D(const cv::Mat& img_original, cv::Mat& img_altered)
{
Mat kernel(3, 3, CV_32F, cv::Scalar(0));
kernel.at<float>(0,1) = - 1.0;
kernel.at<float>(1,0) = - 1.0;
kernel.at<float>(1,2) = - 1.0;
kernel.at<float>(2,1) = - 1.0;
kernel.at<float>(1,1) = 5.0;

//Mat_<cv::Scalar> kernel2 = kernel;
//kernel2(0,1) = -1.0;
//kernel2(1,0) = -1.0;
//kernel2(1,2) = -1.0;
//kernel2(2,1) = -1.0;
//kernel2(1,1) = 5.0;

cv::filter2D(img_original, img_altered, img_original.depth(), kernel);

}

下面是彩色图像的例子:

时间: 2025-01-17 19:51:30

opencv学习笔记(05)——操作相邻区域的相关文章

opencv学习笔记(01)——操作图像的像素

1 #include <opencv2\core\core.hpp> 2 #include <opencv2\highgui\highgui.hpp> 3 #include <opencv2\imgproc\imgproc.hpp> 4 #include <iostream> 5 6 7 void salt(cv::Mat& image, int n) 8 { 9 10 for(int k=0; k<n; k++) 11 { 12 13 int

OpenCV学习笔记之课后习题练习3-5

OpenCV学习笔记之课后习题练习2-5 练习使用感兴趣区域(ROI).创建一个210*210的单通道图像并将其归0.在图像中使用ROI和cvSet()建立一个增长如金字塔状的数组. 参考博文:www.cnblogs.com/tingshuixuan2012/p/OpenCVExercises3_5.html www.cnblogs.com/vitah/archive/2013/05/22/3092083.html 1 /*ch3_lx3_5.cpp 2 添加功能:利用cvPtr2D函数画矩形

Blender学习笔记 | 02 | 操作

Shift 点击不同图层 同时显示多图层物件 z 切换 Solid / Wireframe 视图模式 点选物件后M 移动到图层选项 Ctrl + 鼠标左键拖动 自由全选物件 B 方形区域圈选物件 Tab Object / Edit Mode 切换 T 开 / 关 侧栏 Ctrl + Tab 编辑状态下切换编辑对象 E Extrude Region 推挤区域.以发现为轴线. X 删除物件菜单 Blender学习笔记 | 02 | 操作,布布扣,bubuko.com

Opencv学习笔记(六)SURF学习笔记

原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. 看了harris角点检測之后,開始研究SURF角点检測,发现挺复杂的,一时也仅仅了解了大概,把了解的东西总结下,以便下次深入学习. SURF角点检測算法是对SIFT的一种改进,主要体如今速度上,效率更高.它和SIFT的主要差别是图像多尺度空间的构建方法不同. 在计算视觉领域,尺度空间被象征性的表述

树莓派学习笔记——SQLite操作简述

0 前言 本文介绍如何在树莓派中利用SQLite数据库保存CPU温度数据.SQLite是一款轻量级零配置数据库,非常适合在树莓派和其他嵌入式系统中使用.SQLite文档详细资料丰富,本文不会详细解释SQLite数据库操作的方方面面,只能结合具体场景按需说明.本文介绍的SQLite技巧也可以在其他平台使用,并不局限于树莓派. 本文继续折腾树莓派温度,需要从中可以玩出新花样. [相关博文] [树莓派学习笔记--索引博文]--更多博文请关注. [树莓派学习笔记--获取树莓派CPU温度] [树莓派学习笔

OpenCV 学习笔记(模板匹配)

OpenCV 学习笔记(模板匹配) 模板匹配是在一幅图像中寻找一个特定目标的方法之一.这种方法的原理非常简单,遍历图像中的每一个可能的位置,比较各处与模板是否"相似",当相似度足够高时,就认为找到了我们的目标. 在 OpenCV 中,提供了相应的函数完成这个操作. matchTemplate 函数:在模板和输入图像之间寻找匹配,获得匹配结果图像 minMaxLoc 函数:在给定的矩阵中寻找最大和最小值,并给出它们的位置 在具体介绍这两个函数之前呢,我们还要介绍一个概念,就是如何来评价两

OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 2013-03-23 17:44 16963人阅读 评论(28) 收藏 举报 分类: 机器视觉(34) 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] KAZE系列笔记: OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 OpenCV学习笔记(28)KA

OpenCV学习笔记[5]FLANN特征匹配

OpenCV学习笔记:FLANN特征匹配 本次给出FLANN特征匹配的Java实现. [简介] 特征匹配记录下目标图像与待匹配图像的特征点(KeyPoint),并根据特征点集合构造特征量(descriptor),对这个特征量进行比较.筛选,最终得到一个匹配点的映射集合.我们也可以根据这个集合的大小来衡量两幅图片的匹配程度. 特征匹配与模板匹配不同,由于是计算特征点集合的相关度,转置操作对匹配影响不大,但它容易受到失真.缩放的影响. [特征匹配] FeatureMatching.java: imp

opencv学习笔记(七)SVM+HOG

opencv学习笔记(七)SVM+HOG 一.简介 方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是一种在计算机视觉和图像处理中用来进行物体检测的特征描述子.它通过计算和统计图像局部区域的梯度直方图来构成特征.Hog特征结合SVM分类器已经被广泛用于图像识别中,尤其在行人检测中获得了极大的成功.需要提醒的是,HOG+SVM进行行人检测的方法是法国研究院Dalal在2005的CVPR上提出的. 最近在做车标识别相关的研究,用到了SVM+HOG的方法进行识

SWIFT学习笔记05

1.Swift 无需写break,所以不会发生这种贯穿(fallthrough)的情况.2.//用不到变量名,可用"_"替换 for _ in 1...power { answer *= base } 3.case 可以匹配更多的类型模式,包括区间匹配(range matching),元组(tuple)和特定类型的描述. 可以这样用case case 1...3: naturalCount = "a few" 4.如果存在多个匹配,那么只会执行第一个被匹配到的 ca