给定一系列带水印的照片,我想隔离水印并生成蒙版。
我正在使用 Python 和 numpy。
我已将图片叠加在一起:
def compare_n_img(array_of_img_paths):
img_float_array = []
for path in array_of_img_paths:
img_float_array.append(load_img_as_float(path))
additionF = sum(img_float_array)/len(img_float_array)
addition = additionF.astype('uint8')
return addition
Run Code Online (Sandbox Code Playgroud)
转换为灰度后,得到了这个合成图像。
水印在该合成图中清晰可见。对于人类来说,很容易追踪。
我想要的结果是一个白色图像,水印的形状填充为黑色。因此,如果我用蒙版覆盖一张带水印的图像,水印将被完全覆盖。
我尝试在合成图像上使用边缘检测和阈值处理。但我一直无法找到一种方法来以编程方式隔离水印内容。更不用说创建透明蒙版了。
如果可能的话,我想在纯 numpy 或 cv2 中执行此操作。
任何人都可以帮助我如何使用opencv cannyedge检测计算非定向边缘的数量?我有一个来自opencv的cannyEdge图像,我希望有一个基于边缘方向的直方图,我可以计算它的方向和非方向边数.
我想在MATLAB中使用数学形态学函数来找到can.png图像的边界.输入图像是:

我想得到一个边界,如:

我尝试使用不同的组合和参数使用strel,imerode,imdilate,但结果不够好(远远超出预期)
我的一个试用代码是:
a = imread ('can.png');
b = im2bw(a);
SE = strel('rectangle', [10 50 ]) ;
i2 = imdilate(b,SE);
figure(1); imshow(i2);
p = ones(4);
c = b - imerode(b,p);
figure(2); imshow(c);
Run Code Online (Sandbox Code Playgroud)
输出是:

任何身体可以帮助我,如何创建预期的图像(罐头的边界很薄的黑色背景,拜托?非常感谢你.
我试图从仅包含一辆车和简单背景的图像中分割汽车 

但我从实施中得到的是这个

和

分别
但它很容易在几乎已经分段的图像上工作.

给出结果如

我正在使用的准则是
import cv2
import numpy as np
THRESH_TYPE=cv2.THRESH_BINARY_INV
def show(name,obj):
cv2.imshow(name,obj)
cv2.moveWindow(name, 100, 100)
cv2.waitKey(0)
cv2.destroyAllWindows()
def process_end(new):
drawing = np.zeros(o.shape,np.uint8) # Image to draw the contours
contours,hierarchy =cv2.findContours(new,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)#find connected borders
for cnt in contours:
color = np.random.randint(0,255,(3)).tolist() # Select a random color
cv2.drawContours(drawing,[cnt],0,color,2)
print "processing done"
return drawing
def process(name,path):
global o
print "Started!!! processing "+name
ratio=1#change according to image size
o=cv2.imread(path+name)#open image
print type(o)
show("original",o)
w,h=o.shape[1]/ratio,o.shape[0]/ratio#resize ratio for width and height
new=cv2.resize(o,(w,h))#resize …Run Code Online (Sandbox Code Playgroud) matlab opencv image-processing edge-detection image-segmentation
我一直在使用OpenCV中的houghlines,我似乎无法获得更准确的行读取,有时候有两条重复的行在彼此之上.我查看了opencv网站上的教程,但它给出了类似的结果.
我有一个非常嘈杂的图像,小(相关部分是381×314),功能非常微妙.

源图像和裁剪的相关区域也在这里:http://imgur.com/a/O8Zc2
任务是使用Python计算相关区域内的白点数,但我很高兴只是隔离区域内较亮的点和线并删除背景结构(在这种情况下是单元格).
使用OpenCV我尝试过直方图均衡(破坏细节),找到轮廓(不起作用),使用颜色范围(颜色太近了?)
有关其他事情的任何建议或指导可以尝试吗?我不相信我可以得到更高的res图像,所以这个任务可能与相当困难的来源?
opencv image-processing image-recognition edge-detection noise-reduction
我正在制作一个具有6步算法的图像处理项目,我陷入其中之一.
首先,我使用的平台是MATLAB,所以如果你能提供一些样品,它会很棒.但如果您不想编写代码示例,请给我一些提示,技巧等.
让我解释一下我的问题.我已经对.jpg图像进行了细分,并删除了一些区域.然后我使用掩码将结果保存为.png.结果是这样的(黑色部分实际上是透明的,我把它变成黑色以便更好地看到问题);

正如您在图片中看到的,有一些不相关的区域.我需要摆脱这些无关紧要的领域.因为我希望前景尽可能顺畅.乍一看,我将高斯模糊应用于蒙版并再次将图像保存为.png.但结果并不像你想象的那样令人满意.我认为这种情况需要比我尝试过的更可靠的解决方案.
编辑1:我使用光谱消光.但它没有帮助.我能收到的最好结果就是这样;

正如你所看到的那样,脸上有一些问题,而且图片的底部有很多问题.我想我上面的第一张图片需要一种边缘修复器或边缘平滑器,它应该比消光更快.
任何MATLAB代码示例,技术和方法都会很棒.如果您需要进一步解释,请随时提出.
matlab smooth image-processing edge-detection image-segmentation
我在背景上有一张粘滞便笺的图像(比如一堵墙或一台笔记本电脑),我想要检测粘滞便笺的边缘(粗略检测也可以正常工作),这样我就可以对其进行裁剪.
我计划使用ImageMagick进行实际裁剪,但我仍坚持检测边缘.
理想情况下,我的输出应该给我4个边界点的坐标,这样我就可以在它上面运行我的裁剪.
我该怎么办呢?

我有一个java程序的问题,我正在使用sobel运算符进行边缘检测,但是当我尝试使用该函数时,控制台说:
线程"AWT-EventQueue-0"中的异常java.lang.ArrayIndexOutOfBoundsException:262144 at the Obrasek.jButtonSobelActionPerformed的sun.awt.image.ByteInterleavedRaster.getPixels(ByteInterleavedRaster.java:1015)(Obrazek.java:566)
而代码是:
FileInputStream inFile = null;
try {
long beginTime = (new java.util.Date()).getTime();
int i, j;
double Gx[][], Gy[][], G[][];
inFile = new FileInputStream("D://lenacsmall.bmp");
BufferedImage bi = ImageIO.read(inFile);
int width = bi.getWidth();
int height = bi.getHeight();
int[] pixels = new int[width * height];
int[][] output = new int[width][height];
int[] raster = bi.getRaster().getPixels(0,0,width,height,pixels);
int counter = 0;
for(i = 0 ; i < width ; i++ )
{
for(j = 0 ; j < height ; j++ …Run Code Online (Sandbox Code Playgroud)因为我需要在python中实现某种图像处理程序,所以我也想实现laplace过滤器。我使用矩阵
-1 -1 -1
-1 8 -1
-1 -1 -1
并实现了以下代码:
for row in range(1, (len(self._dataIn) - 1)):
for col in range(1, (len(self._dataIn[row])- 1)):
value = (- int(self._dataIn[row - 1][col -1][0])
- int(self._dataIn[row - 1][col][0])
- int(self._dataIn[row - 1][col + 1][0])
- int(self._dataIn[row][col -1][0]) +
(8 * int(self._dataIn[row][col][0]))
- int(self._dataIn[row][col +1][0])
- int(self._dataIn[row + 1][col -1][0])
- int(self._dataIn[row + 1][col][0])
- int(self._dataIn[row + 1][col +1][0]))
self._dataIn[row][col][0] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][1] = np.minimum(255, np.maximum(0, value))
self._dataIn[row][col][2] = np.minimum(255, np.maximum(0, value)) …Run Code Online (Sandbox Code Playgroud)