小编ase*_*sni的帖子

哪个 SSIM 是正确的:skimage.metrics.structural_similarity()?

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)

python image image-processing ssim scikit-image

7
推荐指数
1
解决办法
7382
查看次数

在 C 中实现双缓冲区

所以我有 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)

c multithreading posix buffering double-buffering

5
推荐指数
1
解决办法
6165
查看次数

无法在流中找到编解码器 subrip 的标签,容器中当前不支持编解码器

我正在尝试使用以下命令将视频转换为较低质量:

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

5
推荐指数
1
解决办法
7343
查看次数

ffmpeg场景检测:仅检查每第n帧?

我正在开发一种工具,可以用它对较长的电影进行快速超级剪辑。

我使用 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但场景检测仍然检查每一帧。这怎么可能做到呢?

谢谢!

ffmpeg detection scene

1
推荐指数
1
解决办法
1765
查看次数