用MATLAB给图片打马赛克

本文介绍了如何使用MATLAB给图片打马赛克,通过getPosition获取鼠标位置,实现图像处理的小程序。作者分享了初步的代码实现,并鼓励读者自行优化程序。

用MATLAB给图片打马赛克

我之前学了图像处理这门课,感觉里面学的一些小程序还是很好玩的就想分享给大家!这是我的第一篇文章,希望大家多多支持!!
话不多说开始吧哈哈哈!

一用getPosition获取鼠标的位置#

getposition是一个面向用户的工具箱,如果想知道更多的功能,请去help里面自己查找哈哈哈哈,其实也很简单就是需要自己看。
打马赛克就是将图像的一部分信息抹除用像素格代替。。。可以是将一个方格内的信息做均值也可是用方格的一个像素点来代替。下面给出用getPosition写的程序

// An highlighted block
clear all;
close all;
clc;
%原图的路径
f = imread('你想用的图片哈哈哈哈哈!.jpg');
imshow(f,[]);
t=imrect;
pos=getPosition(t);
a=int16(pos(1,1));
b=int16(pos(1,2));
c=int16(pos(1,3));
d=int16(pos(1,4));
g=imcrop(f,pos);
gr = g(:,:,1);
[h w] = size(gr);
imgn = g;
%设置马赛克区域n*n像素块大小
n = 20;
nh = floor(h/n)*n;%将不一定是n的整数倍的图像大小化为整数倍
nw = floor(w/n)*n;
%对三个通道进行循环处理
for t = 1:3
    for j = 1:n:nh
        for i = 1:n:nw
            imgn(j:j+n-1, i:i+n-1, t) =mean(mean(g(j:j+n-1, i:i+n-1, t)));%对列进行取均值处理
        end
        imgn(j:j+n-1,nw:w , t ) = mean(mean(g(j:j+n-1,nw:w , t)));%处理最后的列
    end
    for i = 1:n:nw
        imgn(nh:h, i:i+n-1, t) = mean(mean(g(nh:h, i:i+n-1, t)));%处理最后的行
    end
    imgn(nh:h, nw:w, t) = mean(mean(g(nh:h, nw:w , t)));%处理最后的角
end
imshow(imgn);%图片显示
f(b:b+d,a:a+c,1:3)=imgn(:,:,1:3); 
imshow(f)

怎么样,成功了吧哈哈哈。我的程序很烂吧。其实可以将第一层的for循环放在最里面,读者大人们自己去改改吧哈哈哈,给你们看一下效果图!溜了溜了一个弟弟的图片

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值