반응형
적응형 이진화
import cv2
src = cv2.imread("tree.jpg")
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 467, 37)
cv2.imshow("binary", binary)
cv2.waitKey(0)
cv2.destroyAllWindows()
템플릿 매칭
import cv2
src = cv2.imread("hats.png", cv2.IMREAD_GRAYSCALE)
templit = cv2.imread("hat.png", cv2.IMREAD_GRAYSCALE)
dst = cv2.imread("hats.png")
result = cv2.matchTemplate(src, templit, cv2.TM_SQDIFF_NORMED)
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(result)
x, y = minLoc
h, w = templit.shape
dst = cv2.rectangle(dst, (x, y), (x + w, y + h) , (0, 0, 255), 1)
cv2.imshow("dst", dst)
cv2.waitKey(0)
cv2.destroyAllWindows()
ORB(Oriented FAST and Rotated BRIEF
import cv2
import numpy as np
src = cv2.imread("apple_books.jpg")
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
target = cv2.imread("apple.jpg", cv2.IMREAD_GRAYSCALE)
orb = cv2.ORB_create(
nfeatures=40000,
scaleFactor=1.2,
nlevels=8,
edgeThreshold=31,
firstLevel=0,
WTA_K=2,
scoreType=cv2.ORB_HARRIS_SCORE,
patchSize=31,
fastThreshold=20,
)
kp1, des1 = orb.detectAndCompute(gray, None)
kp2, des2 = orb.detectAndCompute(target, None)
bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
matches = bf.match(des1, des2)
matches = sorted(matches, key=lambda x: x.distance)
for i in matches[:100]:
idx = i.queryIdx
x1, y1 = kp1[idx].pt
cv2.circle(src, (int(x1), int(y1)), 3, (255, 0, 0), 3)
cv2.imshow("src", src)
cv2.waitKey()
마우스 콜백
import cv2
import numpy as np
def mouse_event(event, x, y, flags, param):
global radius
if event == cv2.EVENT_FLAG_LBUTTON:
cv2.circle(param, (x, y), radius, (255, 0, 0), 2)
cv2.imshow("draw", src)
elif event == cv2.EVENT_MOUSEWHEEL:
if flags > 0:
radius += 1
elif radius > 1:
radius -= 1
radius = 3
src = np.full((500, 500, 3), 255, dtype=np.uint8)
cv2.imshow("draw", src)
cv2.setMouseCallback("draw", mouse_event, src)
cv2.waitKey()
리매핑
import cv2
import numpy as np
src = cv2.imread("buildings.jpg")
height, width = src.shape[:2]
map2, map1 = np.indices((height, width), dtype=np.float32)
map1 = map1 + width / 100 * np.sin(map1)
map2 = map2 + height / 100 * np.cos(map2)
dst = cv2.remap(src, map1, map2, cv2.INTER_CUBIC)
cv2.imshow("dst", dst)
cv2.waitKey()
색상 맵
import cv2
src = cv2.imread("beach.jpg")
dst = cv2.applyColorMap(src, cv2.COLORMAP_OCEAN)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()
K-평균 군집화 알고리즘
import numpy as np
import cv2
src = cv2.imread("flower.jpg")
data = src.reshape(-1, 3).astype(np.float32)
criteria = (cv2.TERM_CRITERIA_MAX_ITER + cv2.TERM_CRITERIA_EPS, 10, 0.001)
retval, bestLabels, centers = cv2.kmeans(data, 5, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
centers = centers.astype(np.uint8)
dst = centers[bestLabels].reshape(src.shape)
cv2.imshow("dst", dst)
cv2.waitKey()
cv2.destroyAllWindows()
K-평균 최근접 알고리즘
import cv2
import numpy as np
def loadTrainData(image_path, label_path):
with open(image_path, "rb") as image_data:
images = np.frombuffer(image_data.read(), dtype=np.uint8, offset=16)
with open(label_path, "rb") as label_data:
labels = np.frombuffer(label_data.read(), dtype=np.uint8, offset=8)
return images.reshape(-1, 784), labels
train_x, train_y = loadTrainData(
"./fashion-mnist/train-images-idx3-ubyte",
"./fashion-mnist/train-labels-idx1-ubyte"
)
test_x, test_y = loadTrainData(
"./fashion-mnist/t10k-images-idx3-ubyte",
"./fashion-mnist/t10k-labels-idx1-ubyte"
)
label_dict = {
0: "T-shirt/top",
1: "Trouser",
2: "Pullover",
3: "Dress",
4: "Coat",
5: "Sandal",
6: "Shirt",
7: "Sneaker",
8: "Bag",
9: "Ankle boot",
}
knn = cv2.ml.KNearest_create()
retval = knn.train(train_x.astype(np.float32), cv2.ml.ROW_SAMPLE, train_y.astype(np.int32))
count = 500
retval, results, neighborResponses, dist = knn.findNearest(
test_x[:count].astype(np.float32), k=7
)
matches = results.astype(np.uint8) == test_y[:count][:, None]
print(np.count_nonzero(matches) / count * 100)
for idx, result in enumerate(results):
print("Index : {}".format(idx))
print("예측값 : {}".format(label_dict[int(result)]))
print("실제값 : {}".format(label_dict[test_y[idx]]))
cv2.imshow("images", test_x[idx].reshape(28, 28, 1))
cv2.waitKey()
반응형
'OpenCV' 카테고리의 다른 글
이미지 처리(Image Processing) - 이수안컴퓨터연구소 (9강, 동영상) (1) | 2024.06.28 |
---|---|
컴퓨터 비전(Computer Vision) - 이수안컴퓨터연구소 (14강, 동영상) (1) | 2024.06.28 |
OpenCV Example 36강 (0) | 2024.06.27 |
OpenCV Python 고급 활용 강좌 소스 코드 1 (1) | 2023.12.05 |
OpenCV Python 고급 활용 강좌 소스 코드 3 (0) | 2023.12.05 |
OpenCV Python 고급 활용 강좌 소스 코드 2 (0) | 2023.12.05 |
OpenCV 파이선 강의 실습 코드 4 (2) | 2023.11.29 |
OpenCV 파이선 강의 실습 코드 3 (1) | 2023.11.22 |
더욱 좋은 정보를 제공하겠습니다.~ ^^