小编nat*_*ncy的帖子

如何检测图像是否被部分遮挡?

我有大量的航拍图像。其中一些镜头部分被遮挡。例如:

在此处输入图片说明

在此处输入图片说明

我正在尝试使用 OpenCV 自动检测哪些图像具有此功能。我最初的目的是检查多张图像中有多少图像是黑色的。但希望有一种聪明的方法可以单独处理图像。

python opencv image image-processing occlusion

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

删除图像中的水平线(OpenCV,Python,Matplotlib)

使用以下代码,我可以删除图像中的水平线。参见下面的结果。

import cv2
from matplotlib import pyplot as plt

img = cv2.imread('image.png',0)

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)

plt.subplot(2,2,1),plt.imshow(img,cmap = 'gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(laplacian,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])

plt.show()
Run Code Online (Sandbox Code Playgroud)

结果

结果是非常好的,不是完美的但很好。我要实现的是这里显示的那个。我正在使用此代码

源图像 资源

我的问题之一是:如何保存Sobel X没有应用灰色效果的情况?作为原始但已处理..

另外,还有更好的方法吗?

编辑

对源图像使用以下代码是好的。效果很好。

import cv2
import numpy as np

img = cv2.imread("image.png")
img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

img = cv2.bitwise_not(img)
th2 = cv2.adaptiveThreshold(img,255, cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,15,-2)
cv2.imshow("th2", th2)
cv2.imwrite("th2.jpg", th2)
cv2.waitKey(0)
cv2.destroyAllWindows()

horizontal = th2
vertical = th2 …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing matplotlib computer-vision

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

如何将标题和标题与图像中的正文文本分开

我正在使用 tesseract(通过 python 包装器)来从文档中提取文本。这些文档不包含任何图像或表格,仅包含文本。

是否有任何选项可以将标题/标题与文本区分开来?理想情况下,我希望能够拥有类似于 xml 树的东西,而不是完整的字符串链(我不需要查看文档布局)。

我找到了一些似乎能够提供帮助的第三方工具,但我想知道是否可以直接从 tesseract 中完成。

在此处输入图片说明

python ocr opencv tesseract python-tesseract

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

使用OpenCV VideoWriter将RTSP流存储为视频文件

我正在使用OpenCV开发Python模块,该模块连接到RTSP流以对视频执行一些预处理(主要是降低fps和分辨率),然后将其存储在文件系统中。

但是,即使尝试了几种编解码器,也正在寻找类似的发展……我总是以空虚的视频告终。我看过其他线程(cv :: VideoWriter产生不可读的视频),这可能很相似,但是是在C ++上开发的。

有人为此工作吗?我通常使用示例RTSP流作为参考,例如rtsp://freja.hiof.no:1935 / rtplive / definst /hessdalen03.stream,并且可以正确接收甚至观看来自VLC的流。

我已经看到很多线程讨论如何从RTSP流中捕获视频,或者如何与VideoWriters和VideoReaders类以及视频文件一起工作,但是几乎没有结合这两者的内容。

任何帮助将不胜感激:)谢谢!


编辑1:用于存储框架的示例代码。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import cv2
import numpy

# Test frame.
width, height = 400, 300
width_2, height_2 = int(width / 2), int(height / 2)
frame = numpy.zeros((height, width, 3), numpy.uint8)
cv2.rectangle(frame, (0, 0), (width_2, height_2), (255, 0, 0), cv2.FILLED)
cv2.rectangle(frame, (width_2, height_2), (width, height), (0, 255, 0), cv2.FILLED)

frames = [frame for _ in range(100)]
fps = 25

# Define …
Run Code Online (Sandbox Code Playgroud)

python video opencv image-processing rtsp

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

使用OpenCV Python检测并可视化两个图像之间的差异

我有两张图片,并想让它们之间的区别显而易见。我想为两个图像添加颜色,以便用户可以在一两秒钟内清楚地发现所有差异。

例如,这是两张图片,但有一些区别:

leftImage.jpg:

第一张图片

rightImage.jpg:

第二张图片

我当前使差异明显的方法是创建一个蒙版(两个图像之间的差异),将其涂成红色,然后将其添加到图像中。目的是用强烈的红色清楚地标记所有差异。这是我当前的代码:

import cv2

# load images
image1 = cv2.imread("leftImage.jpg")
image2 = cv2.imread("rightImage.jpg")

# compute difference
difference = cv2.subtract(image1, image2)

# color the mask red
Conv_hsv_Gray = cv2.cvtColor(difference, cv2.COLOR_BGR2GRAY)
ret, mask = cv2.threshold(Conv_hsv_Gray, 0, 255,cv2.THRESH_BINARY_INV |cv2.THRESH_OTSU)
difference[mask != 255] = [0, 0, 255]

# add the red mask to the images to make the differences obvious
image1[mask != 255] = [0, 0, 255]
image2[mask != 255] = [0, 0, 255]

# store images
cv2.imwrite('diffOverImage1.png', image1)
cv2.imwrite('diffOverImage2.png', image1) …
Run Code Online (Sandbox Code Playgroud)

python opencv image image-processing computer-vision

7
推荐指数
4
解决办法
1779
查看次数

Python从图像opencv中提取多个对象

我正在尝试使用 OpenCV 使用颜色从图像中提取对象,我尝试过将逆阈值和灰度结合使用,cv2.findContours()但我无法递归使用它。此外,我无法弄清楚如何从原始图像中“剪切”匹配并将其保存到单个文件中。

在此处输入图片

编辑

~
import cv2
import numpy as np

# load the images
empty = cv2.imread("empty.jpg")
full = cv2.imread("test.jpg")

# save color copy for visualization
full_c = full.copy()

# convert to grayscale
empty_g = cv2.cvtColor(empty, cv2.COLOR_BGR2GRAY)
full_g = cv2.cvtColor(full, cv2.COLOR_BGR2GRAY)

empty_g = cv2.GaussianBlur(empty_g, (51, 51), 0)
full_g = cv2.GaussianBlur(full_g, (51, 51), 0)
diff = full_g - empty_g

#  thresholding

diff_th = 
cv2.adaptiveThreshold(full_g,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
cv2.THRESH_BINARY,11,2)

# combine the difference image and the inverse threshold
zone = cv2.bitwise_and(diff, diff_th, …
Run Code Online (Sandbox Code Playgroud)

python opencv image-processing computer-vision deep-learning

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

使用 OpenCV python 跟踪黄色物体

如何使用 opencv 在 python 中跟踪黄色对象?如果可能的话,我怎样才能获得物体的位置?

我尝试过使用以下方法,但我不知道如何降低和提高范围。

import numpy as np
import cv2


cap = cv2.VideoCapture(0)
while True:
    screen =  np.array(ImageGrab.grab())
    ret, img = cap.read()
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)

    #Help
    lower = np.array([])
    upper = np.array([])

    mask = cv2.inRange(hsv, lower, upper)

    cv2.imshow('screen', mask)



    if cv2.waitKey(25) & 0xFF == ord('q'):
        cv2.destroyAllWindows()
        break
Run Code Online (Sandbox Code Playgroud)

它应该找到黄色物体并可能找到它们的位置。

python opencv image colors image-processing

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

如何使用同一图片的二进制蒙版图像裁剪图像以去除python中的背景?

我尝试使用以下代码获取蒙版图像的边缘:

import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('ISIC_0000000_segmentation.png',0)
edges = cv2.Canny(img,0,255)

plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])

plt.show
Run Code Online (Sandbox Code Playgroud)

我得到的是这样的:

在此处输入图片说明 但由于某种原因,边缘并不光滑。

我的计划是使用边缘图像裁剪以下图片:

有谁知道如何使边缘图像更好,以及如何使用它来裁剪正常图像?

编辑:@Mark Setchell 提出了一个很好的观点:如果我可以直接使用蒙版图像来裁剪图像,那就太好了。

另外:也许可以将正常图像精确地放置在蒙版图像上,以便蒙版上的黑色区域覆盖正常图片上的蓝色区域。

编辑:@Mark Setchell 引入了将 normale 图像与蒙版图像相乘的想法,因此背景将导致 0(黑色),其余部分将保持其颜色。当我的蒙版图像是 .png 并且我的正常图片是 .jpg 时,会不会有问题?

编辑:我编写了以下代码来尝试将两张图片相乘:

# Importing Image and ImageChops module from PIL package  
from PIL import Image, ImageChops 

# creating a image1 object 
im1 = Image.open("ISIC_0000000.jpg") 

# creating a image2 object 
im2 = …
Run Code Online (Sandbox Code Playgroud)

python opencv image image-processing computer-vision

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

在 Python 中暂停和重新启动视频

我有几个视频,我想逐帧浏览它们,并通过按键盘键(取决于帧)对其中一些进行注释。对于许多帧我不会按任何键。这是我到目前为止所拥有的:

import numpy as np
import cv2

cap = cv2.VideoCapture('video.mp4')

frame_number = []
annotation_list = []

i = 0
while(True):        
    # Read one frame.
    ret, frame = cap.read()

    # Show one frame.
    cv2.imshow('frame', frame)

    # Set the time between frames in miliseconds
    c = cv2.waitKey(500)
    i = i + 1

    try:
        annotation_list = annotation_list + [chr(c)]
        frame_number = frame_number + [i]
    except:
        continue
Run Code Online (Sandbox Code Playgroud)

因此,这将显示每一帧 0.5 秒,并与我按下按钮的每一帧和给定的字母相关联。我现在需要的是一个选项,这样对于给定的帧,我可以根据需要在该帧处停止视频,例如按“空格”,以便考虑如何对其进行注释,然后按“空格” “一旦我决定如何注释,就再次继续视频。如何添加此暂停/继续选项?谢谢你!

python video opencv video-capture image-processing

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

如何使用Python删除图像中的小对象

我的python代码有问题。我想用胸部 X 光片进行图像处理以获得肺部图案。但是我的代码结果仍然有一点点污渍。如何摆脱这些小物体

在此处输入图片说明

这是我的代码

import cv2
import numpy as np
from skimage import morphology

im = cv2.imread('image.jpg')
ret, thresh = cv2.threshold(im, 150, 255, cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel)
cleaned = morphology.remove_small_objects(opening, min_size=62, connectivity=2)
cv2.imshow("cleaned", cleaned)
cv2.waitKey(0)
Run Code Online (Sandbox Code Playgroud)

PS:当我尝试使用matlab代码时,可以使用此代码删除小对象

K=bwareaopen(~K,1500); %Remove small object (area) pixels less than 1500 pixels
Run Code Online (Sandbox Code Playgroud)

并且该代码可以很好地删除小对象:

在此处输入图片说明

python blob pixel image-processing raspberry-pi

7
推荐指数
2
解决办法
6682
查看次数