- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 koef(见下文)“模糊”矩阵(就像图像一样),但它没有按照我想要的方式工作。我通过 .txt 文件提供矩阵。
This site很好地解释了它是如何工作的。对于这个模糊,我使用了 koef 为 14 的“模糊光”,它是以下 3x3 矩阵(代表模糊密度)的总和:
1 2 1
2 2 2
1 2 1
可能有一种更简单的方法可以做到这一点,而不是将同样的事情硬编码九次。我还有手绘图来表示循环/条件结构以及它们实际在做什么(如果有用的话)。
void blur(int pic[][MAX_COL]/*OUT*/, int height, int width)
{
int newPic[MAX_ROW][MAX_COL] = {0};
for (int h = 0; h < height; h++)
{
for (int w = 0; w < width; w++)
{
if (h == 0 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w-1])
/(pic[h][w] + pic[h][w-1] + pic[h+1][w] + pic[h+1][w-1]);
else if (h == height - 1 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h-1][w-1])
/(pic[h][w] + pic[h-1][w] + pic[h][w-1] + pic[h-1][w-1]);
else if (h == height - 1 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w+1] + 1 * pic[h-1][w+1])
/(pic[h][w] + pic[h-1][w] + pic[h][w+1] + pic[h-1][w+1]);
else if (h == 0 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w-1])
/(pic[h][w] + pic[1][w-1] + pic[h+1][w] + pic[h+1][w-1]);
else if (h == 0 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 2 * pic[h][w+1]
+ 1 * pic[h+1][w+1] + 1 * pic[h-1][w+1])/(pic[h][w] + pic[h+1][w] + pic[h-1][w]
+ pic[h][w+1] + pic[h+1][w+1] + pic[h-1][w+1]);
else if (w == 0 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 1 * pic[h+1][w+1]
+ 1 * pic[h+1][w-1])/(pic[h][w] + pic[h+1][w] + pic[h][w+1] + pic[h][w-1]
+ pic[h+1][w+1] + pic[h+1][w-1]);
else if (h == height - 1 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h+1][w-1]
+ 1 * pic[h-1][w-1])/(pic[h][w] + pic[h+1][w] + pic[h-1][w] + pic[h][w-1]
+ pic[h+1][w-1] + pic[h-1][w-1]);
else if (w == width - 1 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1]
+ 1 * pic[h-1][w-1])/(pic[h][w] + pic[h][w+1] + pic[h][w-1] + pic[h-1][w]
+ pic[h-1][w+1] + pic[h-1][w-1]);
else
newPic[h][w] = (1 * pic[h-1][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1] + 2 * pic[h][w-1]
+ 2 * pic[h][w] + 2 * pic[h][w+1] + 1 * pic[h+1][w-1] + 2 * pic[h+1][w] + 1
* pic[h+1][w+1]) / (pic[h][w] + pic[h-1][w-1] + pic[h-1][w] + pic[h-1][w+1]
+ pic[h][w-1] + pic[h][w+1] + pic[h+1][w-1] + pic[h+1][w]);
}
}
memcpy(pic, newPic, sizeof(newPic));
}
提供矩阵
10 100 10 100 10 100
10 100 10 100 10 100
100 10 100 10 100 10
100 10 100 10 100 10
“模糊”后所需的矩阵
48 46 64 46 64 61
55 48 61 48 61 55
55 61 48 61 48 55
61 64 46 64 46 48
“模糊”后的实际矩阵
2 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
编辑:我更新了我的代码以反射(reflect)所做的两个更正;第一个校正是第一个条件 block 中的 [w-1] 而不是 [w+1],第二个校正是除以邻居密度的总和(而不是值的总和)。
if (h == 0 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h+1][w] + 1 * pic[h+1][w+1])/7;
else if (h == height - 1 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h-1][w-1])/7;
else if (h == height - 1 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w+1] + 1 * pic[h-1][w+1])/7;
else if (h == 0 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w-1])/7;
else if (h == 0 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 2 * pic[h][w+1] + 1 * pic[h+1][w+1] + 1 * pic[h-1][w+1])/10;
else if (w == 0 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 1 * pic[h+1][w+1] + 1 * pic[h+1][w-1])/10;
else if (h == height - 1 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h+1][w-1] + 1 * pic[h-1][w-1])/10;
else if (w == width - 1 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1] + 1 * pic[h-1][w-1])/10;
else
newPic[h][w] = (1 * pic[h-1][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1] + 2 * pic[h][w-1] + 2 * pic[h][w] + 2 * pic[h][w+1] + 1 * pic[h+1][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w+1]) / 14;
48 43 34 43 34 61
43 48 61 48 61 43
43 61 48 61 48 43
61 34 43 34 43 48
Edit2: 结果证明我是个大傻瓜,我的行和列在我脑子里乱转。以下正确运行,再次感谢大家的帮助!
// top left corner
if (h == 0 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h+1][w] + 1 * pic[h+1][w+1])/7;
// bottom right corner
else if (h == height - 1 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h-1][w-1])/7;
// top right corner
else if (h == height - 1 && w == 0)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h-1][w] + 2 * pic[h][w+1] + 1 * pic[h-1][w+1])/7;
// bottom left corner
else if (h == 0 && w == width - 1)
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w-1])/7;
// top edges
else if (h == 0 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 2 * pic[h+1][w]
+ 1 * pic[h+1][w+1] + 1 * pic[h+1][w-1])/10;
// left edges
else if (w == 0 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 1 * pic[h+1][w+1]
+ 1 * pic[h-1][w+1])/10;
// bottom edges
else if (h == height - 1 && (w != 0 && w != width - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w+1] + 2 * pic[h][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1]
+ 1 * pic[h-1][w-1])/10;
// right edges
else if (w == width - 1 && (h != 0 && h != height - 1))
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h+1][w] + 2 * pic[h-1][w] + 2 * pic[h][w-1] + 1 * pic[h+1][w-1]
+ 1 * pic[h-1][w-1])/10;
// middle cells
else
newPic[h][w] = (1 * pic[h-1][w-1] + 2 * pic[h-1][w] + 1 * pic[h-1][w+1] + 2 * pic[h][w-1]
+ 2 * pic[h][w] + 2 * pic[h][w+1] + 1 * pic[h+1][w-1] + 2 * pic[h+1][w] + 1
* pic[h+1][w+1]) / 14;
48 46 64 46 64 61
55 48 61 48 61 55
55 61 48 61 48 55
61 64 46 64 46 48
最佳答案
您应该通过权重之和而不是输入像素值(或矩阵值,如果您愿意)的总和来归一化(除)。
例如第一种情况是:
newPic[h][w] = (2 * pic[h][w] + 2 * pic[h][w-1] + 2 * pic[h+1][w] + 1 * pic[h+1][w-1])
/ (2 + 2 + 2 + 1);
关于c++ - 尝试 "blur"C++ 中的矩阵;有缺陷的算法或代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55408488/
我想对我网站的一部分进行模糊处理,通过单击链接可以使其变得不模糊。为了使这个平滑,我需要应用 blur(0px) 并在元素上进行过渡。但问题是即使使用 blur(0px),文本也会变得不清晰。 .pa
我有一些在元素上的“模糊”事件上运行的代码。此代码需要实际使用 activeElement,因此无法实际从“blur”事件运行。 我希望我能创建一个这样的事件。目的是“willblur”事件在“blu
我认为这个问题很简单。代码如下。 Show Menu let parent = document.getElementById('parent');
所以,我有一个简单的问题,实际上我已经把它写在标题中了。 :) 但我会再重复一次,只是为了完全清楚。问题是: 有没有办法知道“blur”是由“element.blur()”调用的还是“实际的”模糊?我
请看一下这个 jsfiddle:https://jsfiddle.net/heLwx9bz/ 我正在尝试通过过渡“取消模糊”悬停时的一些文本。请注意在转换为 blur(0px) 时文本如何轻微抖动,它
I have written this pen 编辑 see this pen of Alexander Omara for a shorter version of my pen 基本上,我们将 b
TL;DR 我怎样才能得到这个 self-explanatory JSFiddle上类? 来自 the W3C : The blur event occurs when an element lose
我想检测我的浏览器窗口是否有焦点(被选中)。我使用以下代码来执行此操作: $(window).focus(function() { window.focusFlag = true; }).bl
我有两个文本框,其值为"is"和“否”。当我在第一个文本框中输入"is"时,它会发出蜂鸣声,其余文本框也会发生同样的情况。当我在相应的文本框中输入正确的值时,声音应该仅播放一次。 就我而言,声音一次又
所以我遇到的问题似乎有点奇怪。因此,我有一个隐藏的表单,直到单击按钮为止,单击按钮后,表格就可见,并且在输入上有一个 .blur 函数来检查它们是否为空。我尝试在整个 pcontroller 中添加
我正在尝试创建一个可以使用所有可能的填充选项的模糊函数。但是对于BORDER_CONSTANT,您还需要提供颜色,即您要用来填充图片的数字。在opencv的模糊文档中,我看不到需要填充和颜色值的函数模
我有 2 个元素。第一个元素有一个 blur 事件,第二个元素有一个 mousedown 事件。第二个元素上的 mousedown 事件将焦点返回到第一个元素,但由于某种原因会触发第一个元素上的 bl
我试图使用 jQuery 创建一个可编辑的表格。 作为它的一部分,我显示了一个 td 的文本区域 onClick 并且在该文本区域的模糊处我隐藏了它。 问题是当我继续点击其他 td 时,文本区域模糊会
这里 Sample DEMO 我想在类 .drow1 .subval 失去焦点时触发事件,可能缺少某些内容, JS: $(".drow1 .sub_val").on('blur',funtion(){
这是我的代码: 我将以下几行放入脚本中 $('#m').on('blur', alert('blurred');); $('#m').on('focus', alert('focused'););
我有这段代码: window.addEventListener( "focus" , function(){ window.console.log("focus"); } , false );
我为我正在开发的网络应用程序编写了一个自定义下拉列表,并且我想用它来完成一组特定的功能。首先,如果您将鼠标移离菜单,我希望下拉菜单保持打开状态。我希望当您重新单击下拉列表标题、单击下拉列表中的元素之一
我有 3 个 .blur,但出于某种原因只有第一个有效。这是 jquery 代码: $(document).ready(function() { $("#user_name"
我正在尝试使用 HTML5 来验证数字输入。我正在使用 jQuery 来创建元素。如何让浏览器在不单击提交按钮的情况下显示 onBlur 错误消息? jQuery(document.createEle
我一直在试验 backdrop-filter最近,通常使用它来模糊元素后面的任何内容(这是动态的,所以 我不能只使用像 this 这样的东西)。但是,我还需要为所述元素应用阴影,所以我简单地添加了 b
我是一名优秀的程序员,十分优秀!