python - 图像的随机翻转和RGB抖动/轻微值变化?

标签 python opencv numpy image-processing opencv3.0

我想实现一个小程序,它会随机翻转并引入 RGB 抖动/轻微值变化。

如果可能,将抖动/轻微值更改限制为彩色图像中 3 层中的 2 层。

import cv2
import random

probofflip=0.5
probofRGBjit= 0.6

img=cv2.imread('path/to/img.png',1)
if (random.uniform(0,1)>1-probofflip):
    img= cv2.flip(img,1)
if if (random.uniform(0,1)>1-probofRGBjit):
    #function to jitter the RGB layers 
#do something with resultant image.

最佳答案

如果你使用的是 cv2,那么 numpy 对这种操作很有帮助。抖动是指移动一些像素吗?这个例子只处理轻微的值变化。

import cv2
import numpy as np
from pylab import *

img = cv2.imread( r'C:/Users/Public/Pictures/Sample Pictures/Penguins.jpg' )
img = cv2.cvtColor(img, cv2.cv.CV_BGR2RGB)  # cv2 defaul color code is BGR
h,w,c = img.shape # (768, 1024, 3)

noise = np.random.randint(0,50,(h, w)) # design jitter/noise here
zitter = np.zeros_like(img)
zitter[:,:,1] = noise  

noise_added = cv2.add(img, zitter)
combined = np.vstack((img[:h/2,:,:], noise_added[h/2:,:,:]))

imshow(combined, interpolation='none')

enter image description here

如果您想将每个颜色 channel 移动一些像素,则可以使用 np.roll。前任:
# shift each channel by 10 pixels
R = img[:,:,0]
G = img[:,:,1]
B = img[:,:,2]
RGBshifted = np.dstack( (
    np.roll(R, 10, axis=0), 
    np.roll(G, 10, axis=1), 
    np.roll(B, -10, axis=0)
    ))
imshow(RGBshifted)

关于python - 图像的随机翻转和RGB抖动/轻微值变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35152636/

相关文章:

python - 加速用于计算矩阵余因子的 python 代码

python-3.x - Python-如何处理RTSP链接的错误

python - 生成随机数组,其中每个条目只能属于一组离散值

python - 如何使用 python ctypes 管理字符串内存

Python 使用给定窗口运行累积和

c++ - 如何为 GpuMat 编写内核?

visual-studio - 如何使用 Opencv 在矩阵中查找元素

python - 稠密矩形矩阵乘以稀疏矩阵

python - Python 图像库的应用程序配置不正确

python - 警告 - 此实例的状态已从外部设置为成功。服用毒丸