[英]EmguCV C++ to convert C# EmguCV
我正在嘗試使用 EmguCV 在通道 H 中進行像素計數,大多數都在 C ++ 中使用此代碼,並且希望將 EmguCV c ++ 的部分轉換為 C#,尤其是部分 uchartone = comp [0] 。在 (i, j); 這讓我很頭疼,如果你能幫助我,非常感謝?
這是代碼:
ProcessadorImagem::calculaHistograma(cv::Mat imagem, DadosImagem* dadosImagem) {
cv::Mat hls;
cv::cvtColor(imagem, hls, CV_RGB2HLS_FULL);
cv::Mat* comp = new cv::Mat[3];
cv::split(hls, comp);
for (int i = 0; i < imagem.rows; i++)
for (int j = 0; j < imagem.cols; j++) {
uchar tom = comp[0].at<uchar>(i, j);
for (int k = 0; k < dadosImagem->getHistograma().size(); k++) {
uchar min = dadosImagem->getHistograma()[k]->getLimiteInicial();
uchar max = dadosImagem->getHistograma()[k]->getLimiteFinal();
if (tom >= min && tom <= max) {
int contagem = dadosImagem->getHistograma()[k]->getContagemPixels();
dadosImagem->getHistograma()[k]->setContagemPixels(contagem + 1);
break;
}
}
}
}
public class ColorDetails
{
public Hsv hueLowerLimit { get; set; }
public Hsv hueUpperLimit { get; set; }
}
hueLowerLimit = new Hsv(hueLow, satLow, valLow);
hueUpperLimit = new Hsv(hueHigh, satHigh, valHigh);
====================
ColorDetails element = // add hue upperlimit and lower limit here
Image<Gray, byte> filteredImage = null;
//function to filter out a specified hue range
if (element.hueLowerLimit.Hue > element.hueUpperLimit.Hue)
{
filteredImage = hsvImage.InRange(element.hueLowerLimit, new Hsv(180, element.hueUpperLimit.Satuation, element.hueUpperLimit.Value))
.Add(hsvImage.InRange(new Hsv(0, element.hueLowerLimit.Satuation, element.hueLowerLimit.Value), element.hueUpperLimit));
}
else
{
filteredImage = hsvImage.InRange(element.hueLowerLimit, element.hueUpperLimit);
}
/*
//for debugging
Image<Bgr, Byte> masked = new Image<Bgr, byte>(image.Size);
image.Copy(masked, filteredImage);
Console.WriteLine("Color Count : " + filteredImage.CountNonzero()[0]);
CvInvoke.Imshow("out", masked);
CvInvoke.WaitKey(0);
*/
//this is the pixel count of a particular hue range
filteredImage.CountNonzero()[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.