matlab如何让调整保存图像的大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了matlab如何让调整保存图像的大小相关的知识,希望对你有一定的参考价值。
用matlab二值化一RGB图像,原图是64*64的,直接用figure上的保存,图片变的很大,程序用了imresize函数也没反应,请教高手输出的图像如何也保存为同等大小,做数字水印用的
matlab运行得到的图像,利用copyfigure命令,然后在visio中粘贴,得到的图像有点大,如果直接用在beamer中,为了显示图像,只能使scale较小,导致图中的文本太小看不清。如果首先在matlab中的print
preview首先手动修改,就不会出现这个问题。举例如下:
t=-1:0.05:2;
i =
cos(1000*t+deg2rad(30));
plot(t,i,'b-','LineWidth',2);
grid on
axis
on
xlabel('t/s'),ylabel('i/A');
1.为了去掉白边,勾选Edit->copy
options->transparent background。
2.把Match figure screen size前面的对号去掉。
3.勾选File->Print preview->Use manual size and
position,在下面的宽度或高度框中设置合适的大小,再点击Fix aspect ratio。
4.copy
figure到visio中,打印成pdf就可插入beamer。需要注意的是,也可以在matlab中打印成pdf,但是效果没有visio做出来的好。 参考技术A 不要直接保存figure中的图像,将二值化后的矩阵用imwrite保存。追问
如果以这个64*64大小为例,请问二值化后的imwrite函数怎么写,保存后图像的路径在什么位置,因为才接触matlab图像处理,不太懂,谢谢指教
追答比如二值化后的矩阵是A,那么
imwrite(A,'D:\文件夹\你要取的名字,bmp')
如果不指定目录则在matlab当前工作目录中保存。
下面是例子
load trees
BW = im2bw(X,map,0.4);
figure, imshow(X,map), figure, imshow(BW)
imwrite(BW,'ds.bmp')%ds.bmp保存在当前工作目录中
语句:
imwrite(A,filename.ext);%A是要保存的图片,filename是你给图片起的名,ext是你想要的文件格式。
如何在使用 gridfs 保存之前调整大小和图像?
【中文标题】如何在使用 gridfs 保存之前调整大小和图像?【英文标题】:How to resize and image before saving it with gridfs? 【发布时间】:2020-02-16 11:38:25 【问题描述】:我是 mongoDB 和 gridfs 的初学者。我有一个在数据库中保存传入图像的代码。但我想在保存之前调整图像大小。它尝试使用sharp,但我不太明白它是如何工作的。
我尝试了以下代码,但它不起作用
const storage = new GridFsStorage(
url: mongoURI,
file: (req, file) =>
return new Promise((resolve, reject) =>
const filename = req.params.userID;
const fileInfo =
filename: filename,
bucketName: "ProfilePic",
;
resolve(fileInfo);
);
);
const upload = multer( storage );
router.post("/setProfilePic/:userID", upload.single("picture"), async(req, res) =>
//code not working
await sharp(req.file.path)
.resize(500)
.jpeg(quality: 50)
.toFile(
path.resolve(req.file.destination,'resized',image)
)
// end of non working code
return res.status(200).json(state: "ok")
);
【问题讨论】:
sharp 可能会抛出错误。你能用try..catch
块包围await
并记录错误吗?
【参考方案1】:
我的解决方案是使用'multer-gridfs-storage'
中的fromStream
方法
这个想法是这样的:
-
使用
multer
解析文件,获取文件缓冲区(原始数据)
使用sharp
捕获输入缓冲区并创建另一个包含调整大小的图像的缓冲区。
使用Readable
创建可读流,然后应用fromStream
方法将流通过管道传输到数据库。
实施
const multer = require('multer')
const GridFsStorage = require("multer-gridfs-storage");
const Readable = require("stream"); // from nodejs
const sharp = require("sharp");
const storage = new GridFsStorage(
url: mongoURI,
options: useUnifiedTopology: true , // silence the warning
file: () => ( bucketName: "ProfilePic",filename: req.params.userID ),
);
router.post("/setProfilePic/:userID",multer().single('picture'),(req,res) =>
const file = req.file
const buffer = file.buffer
// chain sharp methods
sharp(buffer)
.resize(500)
.jpeg( quality: 50 )
.toBuffer((err, data, info) =>
// data here directly contains the buffer object.
const fileStream = Readable.from(data);
// write the resized stream to the database.
storage.fromStream(fileStream, req, file).then(() =>
res.json( state: 'ok' );
);
);
)
我没有充分利用 multer 的存储引擎,而是创建了自己的流。
我也是 MongoDB 初学者,所以我很高兴能够让它工作。如果还是不行,请留言,我会尽力解决的。
【讨论】:
【参考方案2】:我使用了上一个答案。我进行了一些更改以使其正常工作。我的 req.file.buffer 始终未定义。所以我做了一些改动。
我想在下面强调两件事
确保使用 multer 版本“^2.0.0-rc.1”。
您可以通过以下方式创建缓冲区
const buffer = await getStream.buffer(req.file.stream);
解决方案的其余部分完全相同。这是完整的代码示例。
const multer = require('multer')
const GridFsStorage = require("multer-gridfs-storage");
const Readable = require("stream"); // from nodejs
const sharp = require("sharp");
const getStream = require("get-stream");
const storage = new GridFsStorage(
url: mongoURI,
options: useUnifiedTopology: true , // silence the warning
file: () => ( bucketName: "ProfilePic",filename: req.params.userID ),
);
app.post("/setProfilePic/:userID", multer.single("image"), async (req, res) =>
const file = req.file;
const buffer = await getStream.buffer(req.file.stream);
// chain sharp methods
sharp(buffer)
.resize(200, 100)
.jpeg( quality: 50 )
.toBuffer((err, data, info) =>
// data here directly contains the buffer object.
const fileStream = Readable.from(data);
// write the resized stream to the database.
storage.fromStream(fileStream, req, file).then(() =>
res.json( state: "ok" );
);
);
);
【讨论】:
以上是关于matlab如何让调整保存图像的大小的主要内容,如果未能解决你的问题,请参考以下文章
Matlab中如何只把figure中的图像区域保存为图片文件