Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Opencv分水岭标记_Python_Opencv - Fatal编程技术网

Python Opencv分水岭标记

Python Opencv分水岭标记,python,opencv,Python,Opencv,我正在尝试创建一个基于web的前台提取服务,类似于 我使用基于标记的分水岭图像分割opencv,python。 我使用sketch.js允许用户在图像上绘制标记 我需要从php代码中调用python脚本。 以下是脚本需要执行的操作: 阅读画有标记的图像。 创建一个整数矩阵,其中不同颜色的标记用不同的整数标记。 将标记矩阵和输入图像输入分水岭算法,并将输出存储到本地文件。 提取用相应标记标记的前景。 向用户显示输出。 我在第2步中遇到了问题 这是到目前为止我的代码 #!/usr/bin/env p

我正在尝试创建一个基于web的前台提取服务,类似于

我使用基于标记的分水岭图像分割opencv,python。 我使用sketch.js允许用户在图像上绘制标记

我需要从php代码中调用python脚本。 以下是脚本需要执行的操作:

阅读画有标记的图像。 创建一个整数矩阵,其中不同颜色的标记用不同的整数标记。 将标记矩阵和输入图像输入分水岭算法,并将输出存储到本地文件。 提取用相应标记标记的前景。 向用户显示输出。 我在第2步中遇到了问题

这是到目前为止我的代码

#!/usr/bin/env python

import numpy as np
import cv2
from common import Sketcher

img_m = cv2.imread('1_m.jpg'); //my image which has colored marks on it

h, w = img.shape[:2]
markers = np.zeros((h, w), np.int32)

cv2.imshow("Image",img_m);

//trying to put '1' at all places where image is marked with color (179,230,29)
markers = np.where((img_m == [179,230,29]),1,0)
//trying to put '2' at all places where image is marked with color (238,27,34)
markers = np.where((img_m == [238,27,34]),2,0)

cv2.watershed(img, markers) //gives me error "markers should be 1-channel 32-bit image"

cv2.waitKey(50)

有人能帮我吗。谢谢。

我认为np.zero的形状应该是h,w,1。@igo这没用。“标记”矩阵已正确初始化为32位单通道。问题是在markers=np时,其中img_m==[179230,29],1,0之后,“markers”矩阵变为3通道,而不是1.Right。您正在重新定义您的markers变量。尝试使用其他方法设置标记值。我会使用map函数或简单循环来检查分水岭是否工作,然后寻找一种聪明的方法来实现这一点。@Igonato尝试了一个嵌套循环。工作起来很有魅力。但是还没有找到一种更快的方法。有什么想法吗?我在交互模式下玩了array[array==[b,r,g]]=x表达式,它没有按预期工作,加上所需的三元组,它返回了一些垃圾,我不确定出了什么问题。为这种类型的任务编写C扩展非常容易,但这是最后一件要做的事情,因为它可能会产生更多的问题。