用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循环放在最里面,读者大人们自己去改改吧哈哈哈,给你们看一下效果图!溜了溜了
本文介绍了如何使用MATLAB给图片打马赛克,通过getPosition获取鼠标位置,实现图像处理的小程序。作者分享了初步的代码实现,并鼓励读者自行优化程序。
3083

被折叠的 条评论
为什么被折叠?



