我有一个如下所示的图形火焰:
我试图检测相机视图的外边缘并将图形居中,以便火焰的圆形视图正好位于绘图的中心。因为圆圈的位置可能会随着图像拍摄日期而变化。有时可能在上半部分,有时可能在下半部分,等等。
Python 中是否有任何模块可以检测视图并将其居中?
可重现的代码
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg
img=mpimg.imread('flame.png')
lum_img = img[:,:,0]
img_plot = plt.imshow(lum_img)
img_plot.set_cmap('jet')
plt.axis('Off')
plt.show()
Run Code Online (Sandbox Code Playgroud) 我试图使该图像变薄,但它不断扭曲。
这是我应用细化的相关代码。我也尝试过“瘦”功能而不是“骨架化”,但结果相似。
from skimage.morphology import skeletonize, thin
new_im = cv2.imread(im_pth)
gray = cv2.cvtColor(new_im, cv2.COLOR_BGR2GRAY)
ske = (skeletonize(gray//255) * 255).astype(np.uint8)
cv2.imshow("image", gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
Run Code Online (Sandbox Code Playgroud)
我的目标是在细化后获得与此类似的形状:
我究竟做错了什么?我在网上读到,有时 jpg 文件会导致问题,但我没有该领域的经验来证实这一点。
我知道也许我需要提取交界点并从该点(?)划分 de 线,但我不知道如何做到这一点。
有没有办法用 Python Scikit Image 或 OpenCV 做到这一点?
我一直在问几个关于从 SOF 上的照片中定位和提取迷宫的问题,但是我在不同的照片中得到的答案都没有,甚至在 4 张测试照片中也没有。每次我调整代码以使其适用于 1 张照片时,由于扭曲的角落/部分或光线等,它会在其余照片上失败。我觉得我需要找到一种对扭曲图像不敏感且不同的方法光的强度或迷宫墙壁的不同颜色(迷宫内的线条)。
我一直试图让它在没有运气的情况下工作 3 周。在我放弃这个想法之前,我想问一下是否可以只使用没有 AI 的图像处理来从照片中定位和提取迷宫?如果是的话,你能告诉我怎么做吗?
下面是代码和照片:
import cv2
import numpy as np
from skimage.exposure import rescale_intensity
from skimage.feature import corner_harris, corner_subpix, corner_peaks
from skimage.io import imread, imshow
from skimage.morphology import reconstruction, binary_erosion, skeletonize, dilation, square
from skimage.morphology.convex_hull import convex_hull_image
from skimage.util import invert
from skmpe import parameters, mpe, OdeSolverMethod
maze=cv2.imread("simple.jpg",0)
ret, maze=cv2.threshold(maze,100,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
h, w = maze.shape
seed = np.zeros_like(maze)
size = 40
hh = h // 2
hw = w // 2
seed[hh-size:hh+size, …Run Code Online (Sandbox Code Playgroud) 这是一张我要从中计算每种颜色的对象数的图表。什么是不使用opencv的简单方法?
[编辑2]: 我尝试过的方法如下:(1)有色物体计数
from PIL import Image
im = Image.open('./colored-polka-dots.png').getcolors()
im.sort(key=lambda k: (k[0]), reverse=True)
print('Top 5 colors: {}'.format((im[:5])))
# View non-background colors
color_values = []
for color in im[1:5]:
color_values.append(color[1])
arr = np.asarray(color[1]).reshape(1,1,4).astype(np.uint8)
plt.imshow(arr)
plt.show() # get top 4 frequent colors as green,blue,pink,ornage
# Create a dict of color names and their corressponding rgba values
color_dict = {}
for color_name,color_val in zip(['green','blue','pink','orange'],color_values):
color_dict[color_name] = color_val
# Make use of ndimage.measurement.labels from scipy
# to get the number …Run Code Online (Sandbox Code Playgroud)