Opencv画像の特殊効果処理のスケッチ、ノスタルジア、照明、つかの間、フィルターの原理と実装

画像スケッチ効果

画像のスケッチ効果は、主に次の手順で行われます
。cv.cvtColor()関数を呼び出してカラー画像をグレースケールに
し、cv.GaussianBlur()関数によるガウスフィルターのノイズ低減を実現し、
エッジ検出にCanny演算子を
使用し最後にcvを使用します。しきい値()スケッチ効果を達成するためのアンチバイナリしきい値処理。

#coding:utf-8
import cv2 as cv
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#图像灰度处理
gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

#高斯滤波降噪
gaussian = cv.GaussianBlur(gray, (5,5), 0)
 
#Canny算子
canny = cv.Canny(gaussian, 50, 150)

#阈值化处理
ret, result = cv.threshold(canny, 0, 255, cv.THRESH_BINARY_INV+cv.THRESH_OTSU)

#显示图像
#cv.imshow('src', img)
#cv.imshow('result', result)
cv.imshow('result',np.vstack((gray,result)))
cv.waitKey()
cv.destroyAllWindows()

画像スケッチ特殊効果表示

画像スケッチ効果

画像ノスタルジックな特殊効果

ノスタルジックな効果は、画像の3つのRGBコンポーネントを特定の比率に従って処理した結果です。ノスタルジックな数式は次のとおりです。
イメージノスタルジア特撮式

#coding:utf-8
import cv2 as cv
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像怀旧特效
for i in range(rows):
    for j in range(cols):
        B = 0.272*img[i,j][2] + 0.534*img[i,j][1] + 0.131*img[i,j][0]
        G = 0.349*img[i,j][2] + 0.686*img[i,j][1] + 0.168*img[i,j][0]
        R = 0.393*img[i,j][2] + 0.769*img[i,j][1] + 0.189*img[i,j][0]
        if B>255:
            B = 255
        if G>255:
            G = 255
        if R>255:
            R = 255
        dst[i,j] = np.uint8((B, G, R))
        
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

画像ノスタルジックな特殊効果表示

画像ノスタルジックな特殊効果

画像照明効果

画像照明効果とは、画像内の光に似たハロー効果の存在を指し、画像のピクセル値は、照明の中心点を中心とする円形の範囲で強調されます。
Python実装コードは、主に2層ループを介して画像の各ピクセルをトラバースして画像の中心点を見つけ、次に現在の点と照明の中心の間の距離(平面座標系の2点間の距離)を計算して距離と画像を決定します中心円の半径、中心円内の画像のグレー値の関係が強化され、範囲外の画像のグレー値が保持され、境界範囲と組み合わせて最終的な照明効果を決定します。

#coding:utf-8
import cv2 as cv
import math
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#设置中心点和光照半径
centerX = rows / 2 - 20
centerY = cols / 2 + 20
radius = min(centerX, centerY)

#设置光照强度
strength = 100

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像光照特效
for i in range(rows):
    for j in range(cols):
        #计算当前点到光照中心距离(平面坐标系中两点之间的距离)
        distance = math.pow((centerY-j), 2) + math.pow((centerX-i), 2)
        #获取原始图像
        B =  img[i,j][0]
        G =  img[i,j][1]
        R = img[i,j][2]
        if (distance < radius * radius):
            #按照距离大小计算增强的光照值
            result = (int)(strength*( 1.0 - math.sqrt(distance) / radius ))
            B = img[i,j][0] + result
            G = img[i,j][1] + result
            R = img[i,j][2] + result
            #判断边界 防止越界
            B = min(255, max(0, B))
            G = min(255, max(0, G))
            R = min(255, max(0, R))
            dst[i,j] = np.uint8((B, G, R))
        else:
            dst[i,j] = np.uint8((B, G, R))
        
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

画像照明効果表示

画像照明効果

特殊効果

つかの間の年とは、水のように通過する時間や時間を表すために使用され、画像処理では、元の画像を時間または年の感覚で特殊効果に変換することを指します。Pythonの実装コードは次のとおりです。これは、元の画像の青(B)チャネルのルート値を取得し、それにウェイトパラメータを乗算して、最終的な一時的な効果を生成します。

#coding:utf-8
import cv2 as cv
import math
import numpy as np

#读取原始图像
img = cv.imread('d:/paojie.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#图像流年特效
for i in range(rows):
    for j in range(cols):
        #B通道的数值开平方乘以参数12
        B = math.sqrt(img[i,j][0]) * 12
        G =  img[i,j][1]
        R =  img[i,j][2]
        if B>255:
            B = 255
        dst[i,j] = np.uint8((B, G, R))
        
#显示图像
cv.imshow('result',np.vstack((img,dst)))
cv.waitKey()
cv.destroyAllWindows()

特殊効果表示

特殊効果

画像フィルター効果

フィルターは主に画像のさまざまな特殊効果を実現するために使用され、Photoshopで非常に不思議な効果をもたらします。フィルターは通常、最高の芸術的効果を実現するために、チャンネルおよびレイヤーと組み合わせて使用​​する必要があります。このセクションでは、各元の色を変換して新しい色を取得する、カラールックアップテーブル(ルックアップテーブル)に基づくフィルター処理方法について説明します。たとえば、元の画像のピクセルは赤(R-255、G-0、B-0)で、変換後は緑(R-0、G-255、B-0)になり、その後すべての赤い場所がこれは自動的に緑に変換され、カラールックアップテーブルはすべての色の(行列)変換を実行します。多くのフィルター関数は、元の色に基づいて色を変換するための変換行列を提供します。
ここで、新しいフィルターカラールックアップテーブルがあり、図に示すように、各ピクセルの色分布を含む512×512の画像であるとします。次の画像はローカルとして保存され、画像フィルター処理に直接使用できます。
カラールックアップテーブル

#coding:utf-8
import cv2 as cv 
import numpy as np

#获取滤镜颜色
def getBGR(img, table, i, j):
    #获取图像颜色
    b, g, r = img[i][j]
    #计算标准颜色表中颜色的位置坐标
    x = int(g/4 + int(b/32) * 63)
    y = int(r/4 + int((b%32) / 4) * 63)
    #返回滤镜颜色表中对应的颜色
    return lj_map[x][y]

#读取原始图像
img = cv.imread('d:/paojie.png')
lj_map = cv.imread('lvjing.png')

#获取图像行和列
rows, cols = img.shape[:2]

#新建目标图像
dst = np.zeros((rows, cols, 3), dtype="uint8")

#循环设置滤镜颜色
for i in range(rows):
    for j in range(cols):
        dst[i][j] = getBGR(img, lj_map, i, j)
        
#显示图像
cv.imshow('result',np.vstack((img,dst)))

cv.waitKey()
cv.destroyAllWindows()

画像フィルター特殊効果表示

画像フィルター効果

おすすめ

転載: www.cnblogs.com/wojianxin/p/12757953.html