Stackoverflow 社区,
我正在尝试bmp在 Python 上的两个图像之间计算 SSIM(结构相似性)。我发现了在python 库中实现的structure_similarity()函数skimage和来自此处托管的原始MatLab实现的等效代码。含义如下:
def structuralSimilarityIndex(ref_image, impaired_image, cs_map=False):
window = Metric.fSpecialGauss(constant.SSIM_FILTER_SIZE,
constant.SSIM_FILTER_SIGMA)
C1 = (constant.SSIM_Constant_1 * constant.PIXEL_MAX) ** 2
C2 = (constant.SSIM_Constant_2 * constant.PIXEL_MAX) ** 2
mu1 = signal.fftconvolve(window, ref_image, mode='valid')
mu2 = signal.fftconvolve(window, impaired_image, mode='valid')
mu1_sq = mu1 * mu1
mu2_sq = mu2 * mu2
mu1_mu2 = mu1 * mu2
sigma1_sq = signal.fftconvolve(
window, ref_image*ref_image, mode='valid') - mu1_sq
sigma2_sq = signal.fftconvolve(
window, impaired_image*impaired_image, mode='valid') - mu2_sq …Run Code Online (Sandbox Code Playgroud) 所以我有 16MB/s 的非常高的数据采集率。我正在将 4MB 的数据从设备文件读入缓冲区,然后对其进行处理。然而,这种先写后读的方法对于项目来说是缓慢的。我想在 C 中实现一个双缓冲区。
为了简化我对双缓冲区的想法,为了简单起见,我决定不包括从设备文件中读取。我创建的是一个 C 程序,它产生两个独立的线程 readThread 和 writeThread。我让 readThread 调用我的交换函数来交换缓冲区的指针。
这个实现很糟糕,因为我在互斥锁之外使用共享内存。我实际上有点不好意思发布它,但它至少会让你了解我正在尝试做什么。但是,我似乎无法提出一种实用的方法来同时读取和写入单独的缓冲区,然后在两个线程完成写入和读取后调用交换。
有人可以告诉我是否可以实现双缓冲并让我了解如何使用信号来控制线程何时读写?
请注意, readToBuff (我知道的愚蠢名称)和 writeToBuff 目前实际上并没有做任何事情,它们具有空白功能。
这是我的代码:
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>
pthread_t writeThread;
pthread_t readThread;
pthread_mutex_t buffer_mutex;
char buff1[4], buff2[4];
struct mutex_shared {
int stillReading, stillWriting, run_not_over;
char *writeBuff, *readBuff;
} SHARED;
void *writeToBuff(void *idk) {
while(!SHARED.run_not_over) {
SHARED.stillWriting = 1;
for(int i = 0; i < 4; i++) {
}
SHARED.stillWriting = 0;
while(SHARED.stillReading){};
}
printf("hello from write\n");
return NULL;
} …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用以下命令将视频转换为较低质量:
ffmpeg -i in.mkv -c:a copy -map 0:5 -map 0:6 -map 0:7 -c:s copy -map 0:9 -c:v h264_nvenc -rc constqp -qp 23 -map 0:0 out.mp4
流 0:9 是字幕。我得到
Stream mapping:
Stream #0:5 -> #0:0 (copy)
Stream #0:6 -> #0:1 (copy)
Stream #0:7 -> #0:2 (copy)
Stream #0:9 -> #0:3 (copy)
Stream #0:0 -> #0:4 (h264 (native) -> h264 (h264_nvenc))
Press [q] to stop, [?] for help
[mp4 @ 0x55c6edd3a640] track 0: codec frame size is not set
[mp4 @ 0x55c6edd3a640] …Run Code Online (Sandbox Code Playgroud) 我正在开发一种工具,可以用它对较长的电影进行快速超级剪辑。
我使用 ffmpeg 场景检测来分割这样的场景(然后在Python中解析输出):
ffmpeg -i "video.mp4" -filter_complex "select='gt(scene,0.3)',metadata=print:file=_ffScenes.txt" -vsync vfr scn_%%03d.jpg
许多影片都有褪色现象,这是场景检测的问题。
我不需要准确性,分析文件1 fps就足够了。我尝试将输入帧速率降低到,1 fps但场景检测仍然检查每一帧。这怎么可能做到呢?
谢谢!