- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个图像作为 N x M
- 具有 12 位数据的矩阵,我想使用 imwrite
将图像保存为 。 pgm
文件。
为什么 MATLAB 将图像缩放到 16 位?我怎样才能避免这个?
使用 'MaxValue'
参数似乎也改变了图像,因为之后它无法正确显示,例如在 IrfanView 中。
最佳答案
MaxValue
参数有点反直觉。它确实指定写入带有特定深度最大值标记的 PGM(例如此处为 12 位),但它也告诉 iwwrite
重新缩放数据。重新缩放发生在 writepnm>remap_pixel_values
中:
function newdata = remap_pixel_values(data, maxval)
%REMAP_PIXEL_VALUES Remap pixel values in array of pixel values.
%
% NEWDATA = REMAP_PIXEL_VALUES(DATA, MAXVAL) remaps the pixel values in
% DATA as follows
%
% Class of DATA Input Output
% ------------- ----- ------
% uint8 The set {0,1,...,255} The set {0,1,...,maxval}
% uint16 The set {0,1,...,65535} The set {0,1,...,maxval}
% double The interval [0,1] The set {0,1,...,maxval}
因此,对于 uint16
数据,它将通过位移 bitshift(data,-4); 应用
。您不希望它重新缩放数据,但您还希望它以 12 位格式写入文件(这发生在 65535/maxval
的比例来重新缩放数据; writepnm>write_raw_data
中。解决方法是在调用之前应用相反的比例 imwrite
:
Iscaled = uint16(double(I)*(2^16-1)/(2^12-1))
imwrite(Iscaled,'test.pgm','MaxValue',2^12-1)
请注意,根据上面代码注释中的表格,您也可以使用在 [0,1] 之间缩放的 double 值。
要阅读 12 位 PGM/PPM,请参阅 here .
关于matlab - 为什么 MATLABs "imwrite"缩放 12 位图像以及如何避免这种情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27487816/
我正在尝试将 np 数组保存为图像。问题是,如果我在 imwrite 函数中写入路径,它会起作用,但是如果我将它存储在一个变量中,然后将此变量用作路径,它就不起作用并返回错误。 这有效: cv2.im
我有以下 imwrite陈述: imwrite(img, strcat(thisdir,'_',num2str(j),'_LABEL_',categoryClassifier.Labels(label
我是 Matlab 的新手,虽然我知道一些其他的编程语言,所以如果这很简单,请原谅我。我无法在 StackOverflow 或其他地方找到任何答案。 我使用以下代码生成一个图形: figure(6)
我是 Matlab 的新手,虽然我知道一些其他的编程语言,所以如果这很简单,请原谅我。我无法在 StackOverflow 或其他地方找到任何答案。 我使用以下代码生成一个图形: figure(6)
#include #include using namespace cv; int main( int argc, char** argv ) { const char* imageName =
在 C++ 中使用 VS 2010 并尝试将其放入 for 循环中 String filename = "cropped_" + (ct+1); imwrite(filename + ".jpg",
我对 cv2.imiwrite 有疑问 有两个文件夹,photos 用于普通图像,gray 文件夹用于保存已更改的普通照片的灰度图像 我想读取一张普通图像并更改为灰度,然后保存灰度 这是我的代码 im
我有一个成功运行的图像识别脚本。我想要的是,在成功识别图像后,它将使用当前时间戳记捕获的帧保存到文件名中。 这是我的代码 #!C:\Users\Gurminders\AppData\Local\Pro
我想将所有图片从一个文件夹复制到另一个文件夹。我试图一次又一次地运行此代码,但它只返回False,而不是将图片保存到其他文件夹。 import cv2 import glob input_path =
我在python(cv2)中使用opencv对jpg、png和jpeg、JPG格式的图像进行一些处理。我正在做一个测试,在从“cv2.imread”读取后立即使用“cv2.imwrite”将图像写入磁
在 Ubuntu 16.04 中,我尝试在实时视频中检测人脸并使用 OpenCV 和 Python 保存该图像。具体来说,我想为每个检测到的人脸只保存一张图像,直到我按下“q”。因此,对于检测到的每一
我严重想知道OpenCV的cv2.imwrite()函数的作用。 我注意到,当我使用cv2.imread()阅读图片并使用cv2.imwrite()函数再次保存它们时,对于人眼而言,它们的质量不再相同
我正在尝试构建一个简短的脚本来使用我的立体相机拍摄多个图像并保存它们当我按下按钮时到目录。 但由于某种原因,即使我拍了多张照片,我也只能得到最后一张图像。它还没有显示任何错误,并打印出我在代码中编写的
我试图使用 OpenCV imwrite 函数将图像写入文件夹。代码编译并成功运行,但图像未保存在文件夹/路径中。我正在从“imshow”获取输出,我的图像采用 CV_8UC1 格式。 找到下面的代码
我正在尝试调整样本文件夹中所有图像的大小,然后将所有图像保存回测试文件夹中。下面的代码调整图像大小,但不会将它们保存到目标文件夹“test”中。我不明白问题出在哪里,我已经引用了所有文档,但没有任何东
我使用的是 Basler 相机,我正在尝试使用 OpenCV 保存抓取的图像。然而,当我尝试使用 imwrite() 时,出现了这个错误: imwrite_('C:/Users/Uporabnik/D
一个非常简单的问题...为什么我会收到此代码的读取访问冲突错误? cv::Mat laserSpeckle = Mat::zeros(100,100,CV_8UC1); imwrite( "C://t
我正在使用 C++ 和 opencv 来捕捉相机图像。在此过程中,如下面的代码所示,我还通过在捕获图像前后使用 gettimeofday() 来测量以毫秒为单位的捕获持续时间。 Mat IMG; un
我有一个简单的 OpenCV 应用程序,它从网络摄像头获取视频流,当按下 spacebar 时,它会捕获当前图像并卡住在该图像上。当我尝试使用 cv::imwrite() 方法将图片保存到磁盘时,它不
我使用示例代码读取/写入一个jpg文件,但丢失了颜色。 import sys fn1,fn2 = sys.argv[1:3] import numpy as np, cv2 img1 = cv2.i
我是一名优秀的程序员,十分优秀!