- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有以下情况,我的内存图像和存储到磁盘然后读回的图像不相等,我想了解为什么以及如何“修复”差异。
如果有人想知道为什么我同时拥有(内存和本地磁盘),因为我使用存储的图像使用 OpenCV 的滑动窗口微调我的图像匹配/识别,而无需不断等待视频流显示我正在寻找的内容。
BGR 帧来自通过 ffmpeg
创建的 bgr24
像素格式的视频流,然后像这样进行处理:
self.raw_image = self.pipe.stdout.read(self.byte_length * self.byte_width * self.byte_offset)
bgr_frame = np.frombuffer(self.raw_image, dtype=np.uint8).reshape((self.byte_width, self.byte_length, self.byte_offset))
cv2.imwrite("capture/rgb/Frame_%d.png", self.frame_num), bgr_frame, [cv2.IMWRITE_PNG_COMPRESSION, 0])
现在事情变得有趣了,bgr_frame
被发送到另一个函数,该函数剪切出感兴趣的区域,然后尝试将每个区域与来自图像库的 lib_image
进行匹配图片,像这样
res = cv2.matchTemplate(region, lib_image, 'cv2.TM_CCOEFF_NORMED')
为 bgr_frame
返回的 res
的值徘徊在 .86
区域,即 .1
比像这样从磁盘读回相同的图像要低:
image = cv2.imread("%s/%s" % (input_directory, file))
image = image[:,:,::-1] # Flip BGR to RGB
通过相同的函数推送从磁盘读取的 image
以将区域与库相匹配,结果是 .96
范围内的匹配!
我错过了什么? OpenCV 文档没有提到对图像做任何事情,除了在我的例子中用 0
压缩以特定格式编码图像之外,但很清楚内存中的内容和内容写入磁盘/从磁盘读取不同。
最佳答案
CV2 imwrite
在像这样调用时对 BGR2RGB 的输出进行转换:
cv2.imwrite("capture/rgb/Frame_%d.png", self.frame_num), bgr_frame, [cv2.IMWRITE_PNG_COMPRESSION, 0])
这就是为什么在传递图像进行分析之前添加 cv2.cvtColor(bgr_frame, cv2.COLOR_BGR2RGB)
至少修复了我看到的颜色问题,这也解释了为什么在 CV2 上imread
我不得不翻转阵列以使图像增益恢复为 RGB;可能有一个 CV2.xxxxx
参数,我可以将其传递给 imread
,它会立即将图像读取为 RGB,无需任何数组操作。
image = cv2.imread("%s/%s" % (input_directory, file))
image = image[:,:,::-1] # Flip BGR to RGB
然而,这仍然没有解决我在保存和加载时从 live
流帧 .86
与 .96
匹配不佳的问题与 PNG 相同的框架。
关于python - OpenCV imwrite()/imread() 这两个函数是否以任何方式修改图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53772063/
我正在尝试将 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
我是一名优秀的程序员,十分优秀!