x, y, w, h = cv2.boundingRect(contours[idx])
- это нужные вам координаты, затем запишите их в текстовый файл:
...
with open("coords.txt","w+") as file:
for idx in range(len(contours)):
x, y, w, h = cv2.boundingRect(contours[idx])
mask[y:y+h, x:x+w] = 0
file.write("Box {0}: ({1},{2}), ({3},{4}), ({5},{6}), ({7},{8})".format(idx,x,y,x+w,y,x+w,y+h,x,y+h))
cv2.drawContours(mask, contours, idx, (255, 255, 255), -1)
r = float(cv2.countNonZero(mask[y:y+h, x:x+w])) / (w * h)
...
Результат будет содержать 4 точки для каждой ячейки, как здесь.
Box 0: (360,259), (364,259), (364,261), (360,261)
Box 1: (380,258), (385,258), (385,262), (380,262)
Box 2: (365,258), (370,258), (370,262), (365,262)
Box 3: (386,256), (393,256), (393,260), (386,260)
Box 4: (358,256), (361,256), (361,258), (358,258)
При создании анонимного типа (что Вы делаете с "новым", не указывая тип) необходимо указать имя элемента для каждого свойства. От Вашего примера это выглядело бы примерно так: (также зафиксированный Ваши соединения)
var query = from a in db.tblActivities
join i in db.tblIPs on a.ipid equals i.id
join u in db.tblUsers on i.uid equals u.id
select new {
UserName = (u.UserName ?? i.Address),
Request = a.Request,
Date = a.DateTime
};
Вы могли, вероятно, сделать UserName Ваш путь, также:
UserName = (u.UserName == null) ? i.Address : u.UserName,
но?? оператор более краток. Это подобно "isnull" в SQL.
В самом деле. этот вопрос зависит от конкретной реализации IQueryable, который возвратит Ваше linq выражение. Я вижу, что у Вас есть дб. XXX так Вы использующий linq к sql или некоторому linq к хранилищу данных? Если так, определенная реализация IQueryable должна будет иметь способ перевести Ваше выражение в выражение хранилища. Кроме вышеупомянутых комментариев, некоторые из других комментариев корректны, что в анонимном типе необходимо указать имя каждого участника. Это - действительно Ваша ошибка.
Необходимо использовать ключевое слово соединения и определить отношения между объектами для создания надлежащего внутреннего объединения.
Здесь можно найти некоторые примеры об этом, я также настоятельно рекомендую Вам для получения LinqPad, это - действительно ценный инструмент для тестирования запросов, также его очень хорошее для изучения, это имеет 200 + примеры.
если Вы проверяете только на пустой указатель, можно ли также использовать??
string something = null;
string somethingElse = something ?? "default value";
Что касается примеров выше, это корректно, чтобы сделать тех, которые идут...
string something = (somethingElse == null ? "If it is true" : "if it is false");
parens не требуются, но они действительно помогают в чтении.
Я довольно плохо знаком с Linq к SQL, но я вполне уверен, он пошел бы как это:
var query =
from a in db.tblActivities
from i in a.tblIPs
from u in i.tblUsers
select new
{
userName = (u.UserName == null)
? i.Address
: u.UserName,
a.Request,
a.DateTime
};
Если оператор должен быть в круглых скобках и результатах за пределами них. Что касается соединений, Вы следуете за цепочкой по сравнению с одной-> многие.