当前位置: 首页>>代码示例>>C++>>正文


C++ Pila::OrdenadaTope方法代码示例

本文整理汇总了C++中Pila::OrdenadaTope方法的典型用法代码示例。如果您正苦于以下问题:C++ Pila::OrdenadaTope方法的具体用法?C++ Pila::OrdenadaTope怎么用?C++ Pila::OrdenadaTope使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Pila的用法示例。


在下文中一共展示了Pila::OrdenadaTope方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: doubleThresholding_c

void doubleThresholding_c (
	unsigned char *src,
	int cantFilas,
	int cantColumnas,
	int src_row_size
) {
	int i;
	int j;
	Pila laPila;
	int abc;
	int ord;
	unsigned char *pos;
	

	vector<bool> aux(cantColumnas, true);
	vector< vector<bool> > porRevisar(cantFilas, aux);
	
	for(j = 0; j < cantColumnas; ++j){
		porRevisar[0][j] = false; // Primer fila
		porRevisar[cantFilas-1][j] = false; // Última fila
	}
	for(i = 1; i < cantFilas-1; ++i){
		porRevisar[i][0] = false; // Primer columna
		porRevisar[i][cantColumnas-1] = false; // Última columna
	}

	/// Operación con los píxeles
	for(i = 1 ; i < cantFilas-1 ; i++){
		for(j = 1 ; j < cantColumnas-1 ; j++){
			pos = src + i*src_row_size + j;									/// pos guarda la posición en la que uno está iterando
			if ( porRevisar[i][j] && *pos == 0 ) porRevisar[i][j] = false; /// Si no fue revisado y es nulo lo marca como revisado
			else if( porRevisar[i][j] && *pos == 200 ){ 	/// Si aún no fue revisado y es píxel fuerte
				/// Chequea todos los píxeles vecinos, si son débiles los pone en la pila para procesarlos luego
				/*	1 2 3 */
				/*	4 X 6 */
				/*	7 8 9 */
				
				if( *(pos - src_row_size - 1) 	== 100 ) laPila.Apilar(i-1, j-1);	/// Apila el pixel de la pos 1
				if( *(pos - src_row_size) 		== 100 ) laPila.Apilar(i-1, j);		/// Apila el pixel de la pos 2
				if( *(pos - src_row_size + 1) 	== 100 ) laPila.Apilar(i-1, j+1);	/// Apila el pixel de la pos 3
				if( *(pos - 1)					== 100 ) laPila.Apilar(i, j-1);		/// Apila el pixel de la pos 4
				if( *(pos + 1)					== 100 ) laPila.Apilar(i, j+1);		/// Apila el pixel de la pos 6
				if( *(pos + src_row_size - 1)	== 100 ) laPila.Apilar(i+1, j-1);	/// Apila el pixel de la pos 7
				if( *(pos + src_row_size)		== 100 ) laPila.Apilar(i+1, j);		/// Apila el pixel de la pos 8
				if( *(pos + src_row_size + 1)	== 100 ) laPila.Apilar(i+1, j+1);	/// Apila el pixel de la pos 9
				
				porRevisar[i][j] = false;										/// Al fuerte lo marca como revisado
				
				while( !laPila.EsVacia() ){		/// Mientras la pila no sea vacía opera todos los puntos
					abc = laPila.AbcisaTope();
					ord = laPila.OrdenadaTope();
					pos = src + abc*src_row_size + ord;
					laPila.SacarTope();											/// Saca al par ordenado ya operado

					if(porRevisar[abc][ord]){
						
						*pos = 200;					/// Pinta fuerte al píxel	
			
						/// Revisa los vecinos y todos los débiles los agrega a la pila
						if( *(pos - src_row_size - 1) 	== 100 ) laPila.Apilar(abc-1, ord-1);
						if( *(pos - src_row_size) 		== 100 ) laPila.Apilar(abc-1, ord);
						if( *(pos - src_row_size + 1) 	== 100 ) laPila.Apilar(abc-1, ord+1);
						if( *(pos - 1)					== 100 ) laPila.Apilar(abc, ord-1);
						if( *(pos + 1)					== 100 ) laPila.Apilar(abc, ord+1);
						if( *(pos + src_row_size - 1)	== 100 ) laPila.Apilar(abc+1, ord-1);
						if( *(pos + src_row_size)		== 100 ) laPila.Apilar(abc+1, ord);
						if( *(pos + src_row_size + 1)	== 100 ) laPila.Apilar(abc+1, ord+1);
						
						porRevisar[abc][ord] = false;							/// Lo marca como revisado
					}
				}
			}
		}
	}
	
	
	/// Por último, anula todos los débiles que sobrevivieron
	for(i = 1 ; i < cantFilas-1 ; i++){
		for(j = 1 ; j < cantColumnas-1 ; j++){
			if( *(src + i*src_row_size + j) == 100 ) *(src + i*src_row_size + j) = 0;
		}
	}
}
开发者ID:partu18,项目名称:edge_detection_algorithm_SIMD,代码行数:83,代码来源:doubleThresholding_c.cpp


注:本文中的Pila::OrdenadaTope方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。