opencv卷积内核对图片的处理问题?

Yangxiu123321 2018-01-26 01:30:34
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>

using namespace std;
using namespace cv;

int main()
{
Mat srcImage = imread("lena.jpg");

//判断图像是否加载成功
if(srcImage.data)
cout << "图像加载成功!" << endl << endl;
else
{
cout << "图像加载失败!" << endl << endl;
return -1;
}
namedWindow("srcImage", WINDOW_AUTOSIZE);
imshow("srcImage", srcImage);

Mat kern = (Mat_<char>(3,3) << 0, -1 ,0,
-1, 5, -1,
0, -1, 0);
Mat dstImage;
filter2D(srcImage,dstImage,srcImage.depth(),kern);
namedWindow("dstImage",WINDOW_AUTOSIZE);
imshow("dstImage",dstImage);


waitKey(0);

return 0;
}
运行结果:

但如果把卷积内核换成:
Mat kern = (Mat_<char>(3,3) << 0, -1 ,0,
-1, 4, -1,
0, -1, 0);
//5编程了4.
结果就变成了

请问卷积内核的这种改变是如何让图片产生这样的结果的?
...全文
332 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
大大的道道的 2018-01-30
  • 打赏
  • 举报
回复
在一个3X3 的区域里, 你用锐化算子 0, -1 ,0,-1, 5, -1, 0, -1, 0); 假设这个区域里的像素一样, 最后卷积出来的结果是约等于原来的像素-----中间的像素加上上下左右的差分,结果会表现为锐化; 但是如果卷积内核是0, -1 ,0, -1, 4, -1, 0, -1, 0 那么累加起来就约等于0 了, 其结果是上下左右的差分的和。。。

4,248

社区成员

发帖
与我相关
我的任务
社区描述
OpenCV相关技术交流专区
计算机视觉人工智能opencv 技术论坛(原bbs) 广东省·深圳市
社区管理员
  • OpenCV
  • 幻灰龙
  • OpenCV中国团队
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

OpenCV中国团队官方博客:https://blog.csdn.net/opencvchina

试试用AI创作助手写篇文章吧