白底换红底

局部阈值调整

边界高斯滤波

function demo

global R
global threshold
global img
global dstColor
global rect
global mask
global biasStep biasStep = 5;
dstColor = [255 0 0]; %% background color
img = imread('g.jpg'); %% load photo
R = img(:,:,1);
[mm, nn] = size(R);
rect = [1 1 nn, mm]; threshold = 200 * ones(mm, nn); %% init threshold
figure('KeyReleaseFcn',@processCMD);
mask = R < threshold; %% init mask
processImg(img, mask, rect, dstColor);
text(20, 20, sprintf('Threshold : %d', threshold(1))) function processCMD(src, evnt)
global R
global threshold
global img
global dstColor
global rect
global mask
global biasStep if strcmp(evnt.Key, 'uparrow')
threshold = changeThreshold(threshold, rect, biasStep);
mask = R < threshold;
processImg(img, mask, rect, dstColor); elseif strcmp(evnt.Key, 'downarrow')
threshold = changeThreshold(threshold, rect, - biasStep);
mask = R < threshold;
processImg(img, mask, rect, dstColor); elseif strcmp(evnt.Key, 'leftarrow')
if biasStep > 2
biasStep = biasStep - 1;
processImg(img, mask, [], dstColor);
end
elseif strcmp(evnt.Key, 'rightarrow')
biasStep = biasStep + 1;
processImg(img, mask, [], dstColor);
elseif strcmp(evnt.Key, 'space')
%% select rect
processImg(img, mask, [], dstColor);
rect = floor(getrect());
processImg(img, mask, rect, dstColor);
elseif strcmp(evnt.Key, 'g')
I = processImg(img, mask, [], dstColor);
%% gaussian filter
G = fspecial('gaussian',[5 5],2);
Ig = imfilter(I,G,'same');
eg = repmat(imdilate(edge(mask), strel('diamond', 5)), [1 1 3]);
I(eg) = Ig(eg);
imshow(I, []);
imwrite(I, 'output.jpg') else
disp('unkown command')
disp(evnt.Key) end
tmp = threshold(rect(2) : rect(2) + rect(4) - 1, rect(1) : rect(1) + rect(3) - 1);
text(20, 20, sprintf('Threshold : %f, step : %d', tmp(1), biasStep)); function newImg = processImg(img, mask, rect, dstColor)
[mm, nn, pp] = size(img);
newImg = zeros(mm, nn, pp);
for i = 1 : 3
tmp = ones(mm, nn) * dstColor(i);
tmpImg = img(:, :, i);
tmp(mask) = tmpImg(mask);
newImg(:,:,i) = tmp;
end
newImg = uint8(newImg); imshow(newImg);
if ~ isempty(rect)
rectangle('Position', rect, 'LineWidth', 2)
end function threshold = changeThreshold(threshold, rect, bias)
threshold(rect(2) : rect(2) + rect(4) - 1, rect(1) : rect(1) + rect(3) - 1) = mean(mean(threshold(rect(2) : rect(2) + rect(4) - 1, rect(1) : rect(1) + rect(3) - 1)));
threshold(rect(2) : rect(2) + rect(4) - 1, rect(1) : rect(1) + rect(3) - 1) = bias + threshold(rect(2) : rect(2) + rect(4) - 1, rect(1) : rect(1) + rect(3) - 1);

matlab白底换红底的更多相关文章

  1. Python给照片换底色(蓝底换红底)

    环境要求 Python3 numpy函数库 opencv库 安装 下载适应版本的numpy函数库,我电脑是WIN10 64位,安装的函数库是 numpy-1.13.1+mkl-cp36-cp36m-w ...

  2. 用图来教你怎样用Photoshop蓝底转换红底

      教你怎样用红底转换成蓝底.PS其实学了这个,你就可以在白底红底蓝底之间不同转变了.   第一步   第二步   第三步   第四步         最后给你们看看对比效果图

  3. 教你用OpenCV 和 Python给证件照换底色(蓝底 <->红底->白底)

    在我们的生活中常常要用到各种底色要求的证件电子照,红底.蓝底.或者白底,而假如你手上只有一种底色的证件照,你又不想再去拍又不会PS怎么办?今天教你们用OpenCV和Python给你的证件照换底色. P ...

  4. MACD:黄白线、红绿柱与0轴关系

    一.MACD的基本问题: (1)参数:统一用12,26,9 (2)MACD   位正.位不正原则 以下四种情况是黄白线.红绿柱与0轴关系的完全分类,行情出不了这四种情况, 即便黄白线在0轴单边反复缠绕 ...

  5. OpenCV实现彩色图像轮廓 换背景颜色

    转摘请注明:https://i.cnblogs.com/EditPosts.aspx?opt=1 有时候我们需要不一样颜色的证件照,下面就用OpenCV来实现证件照的蓝底.红底等换颜色: 代码如下: ...

  6. 【PS】证件照转换背景色

    证件照转换背景色 2019-07-14  12:18:49  by冲冲 1. 需求 自由切换证件照的背景颜色(白底.蓝底.红底...) 2. 步骤 ① 双击 图层锁 解锁,弹出的"新建图层0 ...

  7. Excel修改证件照图片背景色

    在实际生活中,我们常常需要把白底证件照更改为蓝底或红底.操作步骤只需4步!   工具/原料   Excel 方法/步骤     第1步:插入白底证件照 单击[插入]---[图片],选择图片保存的位置, ...

  8. vue入门基础知识点测试

    vue入门基础知识点测试 1.文本(值绑定){{var}}----控制<div></div>的值显示当前时间,且1秒更新一次.(可查阅 setinterval 函数,时间Dat ...

  9. [汇编语言]-第九章 在屏幕中间分别显示绿底红色,白底蓝色字符串"welcome to masm!"

    ;在屏幕中间分别显示绿色,绿底红色,白底蓝色字符串"welcome to masm!" assume cs:codesg,ds:datasg,ss:stacksg datasg s ...

随机推荐

  1. swich-----case语句的用法

    转:  http://xinzhi.wenda.so.com/a/1517927252619839

  2. 笔记16 C# typeof() & GetType()

    C#中任何对象都具有GetType()方法,它的作用和typeof()相同,返回Type类型的当前对象的类型.typeof(x)中的x,必须是具体的类名.类型名称等,不可以是变量名称:GetType( ...

  3. 笔记12 export to excel (NPOI)

    1:filestream 熟悉关于文件操作 ==>fs.Seek(0, SeekOrigin.Begin);//每次打开文件, ==>若果重写覆盖的话,必须先清空 fs.SetLength ...

  4. canvas转盘抽奖的实现(二)

    本篇是<canvas转盘抽奖的实现(一)>的另一种实现方法,主要通过css3的transform以及transition过渡来实现.     // ' + r + '等奖'; } draw ...

  5. mac下执行文件出现Permission Denied的解决

    mac 下终端访问文件出现“Permission Denied”解决方案: 一个文件有3种权限,读.写.可执行,你这个文件没有可执行权限,需要加上可执行权限. 1. 终端下先 cd到该文件的目录下 2 ...

  6. 为什么在 Java 中用 (low+high)>>>1 代替 (low+high)/2 或 (low+high)>>1 来计算平均值呢?好在哪里?

    >>>与>>是位运算符,只对整型有效(不能用于浮点型).当是整型的时候(low+high)>>1可以代替(low+high)/2.>>>是无 ...

  7. 解析json的方式

    一.Javascrip操作json 原始方式: var str1 = '{ "name": "jacun", "addr": "b ...

  8. 【甘道夫】Eclipse+Maven搭建HBase开发环境及HBaseDAO代码演示样例

    环境: Win764bit Eclipse Version: Kepler Service Release 1 java version "1.7.0_40" 第一步:Eclips ...

  9. [通信]Linux User层和Kernel层常用的通信方式

    转自:https://bbs.csdn.net/topics/390991551?page=1 netlink:https://blog.csdn.net/stone8761/article/deta ...

  10. [noip2014day1-T3]飞扬的小鸟

    Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙.如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败. ...