OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 6428|回复: 7

一种效率较高的操作图像数据方法

[复制链接]
发表于 2011-3-18 16:35:01 | 显示全部楼层 |阅读模式
// 阈值
CImage img;
img.Load();

IplImage* pImg = img->GetImage();
int threshold = 120;
RgbImage bits(pImg);

for (int y = 0; y < pImg->height; y++)
{
        for (int x= 0; x < pImg->width; x++)
        {
                RgbPixel& pixel = bits[y][x]; // !!!使用引用
                if (pixel.r < threshold)
                {
                        pixel.r = 0;
                        pixel.g = 0;
                        pixel.b = 0;
                }
        }
}

img.Show( &quot;Image&quot; );

附模板定义:
template<class T>
class ImageBit
{
private:
        IplImage* imgp;

public:
        ImageBit( IplImage* img = 0 ){        imgp = img; }
        ~ImageBit() {imgp = 0;}
        void operator=(IplImage* img){imgp = img;}

        inline T* operator[](const int row)
        {
                return (T*)(imgp->imageData + row * imgp->widthStep);
        }
};

typedef struct  RgbPixel
{
        unsigned char b, g, r;

}RgbPixel;

typedef struct RgbPixelFloat
{
        float b, g, r;

}RgbPixelFloat;

typedef ImageBit<RgbPixel> RgbImage;
typedef ImageBit<RgbPixelFloat> RgbImageFloat;
typedef ImageBit<unsigned char> BwImage;
typedef ImageBit<float> BwImageFloat;
回复

使用道具 举报

发表于 2011-3-18 16:42:19 | 显示全部楼层

一种效率较高的操作图像数据方法

为啥说效率高呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-3-18 16:48:37 | 显示全部楼层

一种效率较高的操作图像数据方法

还有哪种方式更高效率的吗? 还望赐教!
回复 支持 反对

使用道具 举报

发表于 2011-3-18 17:09:20 | 显示全部楼层

一种效率较高的操作图像数据方法

还有哪种方式更高效率的吗? 还望赐教!

OpenCV里面自带了几个宏,比你这个高效一点。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-3-18 18:48:20 | 显示全部楼层

一种效率较高的操作图像数据方法

你是指 cvGet2D 这类函数?
   这些函数效率比不上我上面的操作方式
回复 支持 反对

使用道具 举报

发表于 2011-3-19 15:16:29 | 显示全部楼层

一种效率较高的操作图像数据方法

你是指 cvGet2D 这类函数?
   这些函数效率比不上我上面的操作方式
姐姐,我说的是宏……你觉得你那点inline就高效,就很好玩吗?加上了模板是不是觉得高级?
你不就是操作一矩阵吗?搞那么复杂,你以为你在玩设计模式呢?

我说宏比你高效一点,你可能觉得宏调试的时候麻烦,那好你不是用C++吗?
直接用OpenCV的CvImage的data成员函数比你的慢吗?
  1. (cvImg->data())&#91;r&#93;&#91;c&#93;;
复制代码
还引用,还模板,这就是自以为是的设计。
回复 支持 反对

使用道具 举报

发表于 2011-3-19 15:40:45 | 显示全部楼层

一种效率较高的操作图像数据方法

原来是抄的论坛入门wiki上的,我说怎么这么眼熟
<!-- m --><a class=\"postlink\" href=\"http://www.opencv.org.cn/index.php/OpenCV_%E7%BC%96%E7%A8%8B%E7%AE%80%E4%BB%8B%EF%BC%88%E7%9F%A9%E9%98%B5/%E5%9B%BE%E5%83%8F/%E8%A7%86%E9%A2%91%E7%9A%84%E5%9F%BA%E6%9C%AC%E8%AF%BB%E5%86%99%E6%93%8D%E4%BD%9C%EF%BC%89\">http://www.opencv.org.cn/index.php/Open ... C%EF%BC%89</a><!-- m -->
回复 支持 反对

使用道具 举报

发表于 2011-10-26 17:17:12 | 显示全部楼层

一种效率较高的操作图像数据方法

这个应该是使用起来更舒服而不是高效。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-5-3 13:56 , Processed in 0.009594 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表